add sort coast time test
parent
bf4d8c5fb9
commit
7cfdaab3d0
|
@ -53,23 +53,42 @@ public class InsertSort {
|
|||
break;
|
||||
}
|
||||
}
|
||||
// System.out.println(Arrays.toString(arr));
|
||||
// System.out.println("第" + i + "轮:" + Arrays.toString(arr));
|
||||
}
|
||||
}
|
||||
|
||||
public static void sort3(int[] arr) {
|
||||
for (int i = 1; i < arr.length; i++) {
|
||||
int j = i - 1; // 已排序的最后一个元素下标
|
||||
int temp = arr[i]; // 下一个元素(待排序元素)
|
||||
for (; j >= 0; j--) {
|
||||
if (temp < arr[j]) {
|
||||
arr[j + 1] = arr[j]; // arr[j] 后移
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (j + 1 != i) {
|
||||
arr[j + 1] = temp;
|
||||
}
|
||||
// System.out.println("第" + i + "轮:" + Arrays.toString(arr));
|
||||
}
|
||||
}
|
||||
|
||||
public static void sort2(int[] arr) {
|
||||
for (int i = 1; i < arr.length; i++) {
|
||||
int value = arr[i]; // 下一个元素(新元素)
|
||||
int temp = arr[i]; // 下一个元素(待排序元素)
|
||||
int j = i - 1; // 已排序的最后一个元素下标
|
||||
while (j >= 0 && arr[j] > value) {
|
||||
while (j >= 0 && arr[j] > temp) {
|
||||
arr[j + 1] = arr[j]; // arr[j] 后移
|
||||
j--;
|
||||
}
|
||||
|
||||
if (j + 1 != i) {
|
||||
arr[j + 1] = value;
|
||||
arr[j + 1] = temp;
|
||||
}
|
||||
// i=2, value=1
|
||||
// i=2, temp=1
|
||||
// 4, 9, 1, 8, 6, 2
|
||||
// 4, 9, 9, 8, 6, 2
|
||||
// 4, 4, 9, 8, 6, 2
|
||||
|
@ -89,13 +108,15 @@ public class InsertSort {
|
|||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
int[] arr = new int[80000];
|
||||
for (int i = 0; i < 80000; i++) {
|
||||
arr[i] = (int) (Math.random() * 8000000); //生成一个[0, 8000000) 数
|
||||
int[] arr = new int[80_000];
|
||||
for (int i = 0; i < 80_000; i++) {
|
||||
arr[i] = (int) (Math.random() * 8_000_000); //生成一个[0, 8000000) 数
|
||||
}
|
||||
// int[] arr = {4, 9, 1, 8, 6, 2};
|
||||
|
||||
|
||||
long startTime = System.currentTimeMillis();
|
||||
sort2(arr);
|
||||
sort3(arr);
|
||||
System.out.printf("排序花费时间 %dms.", System.currentTimeMillis() - startTime);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -65,6 +65,34 @@ public class ShellSort {
|
|||
sort(arr, gap / 2);
|
||||
}
|
||||
|
||||
public static void sort2(int[] arr, int gap) {
|
||||
if (arr == null || arr.length <= 0 || gap < 1) {
|
||||
return;
|
||||
}
|
||||
for (int i = 0; i < gap; i++) {
|
||||
// 对按照 gap 进行分组的元素进行插入排序
|
||||
for (int j = gap + i; j < arr.length; j += gap) {
|
||||
int k = j - gap;
|
||||
int temp = arr[j];
|
||||
for (; k >= 0; k -= gap) {
|
||||
if (arr[k] > temp) {
|
||||
arr[k + gap] = arr[k];
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (k + gap != j) {
|
||||
arr[k + gap] = temp;
|
||||
}
|
||||
}
|
||||
}
|
||||
// System.out.println(Arrays.toString(arr));
|
||||
|
||||
// 每次将 gap 折半减小,循环上述操作
|
||||
sort2(arr, gap / 2);
|
||||
}
|
||||
|
||||
public static void swap(int[] arr, int i, int j) {
|
||||
int tmp = arr[i];
|
||||
arr[i] = arr[j];
|
||||
|
@ -72,13 +100,14 @@ public class ShellSort {
|
|||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
int[] arr = new int[80000];
|
||||
for (int i = 0; i < 80000; i++) {
|
||||
arr[i] = (int) (Math.random() * 8000000); //生成一个[0, 8000000) 数
|
||||
int[] arr = new int[800_000];
|
||||
for (int i = 0; i < 800_000; i++) {
|
||||
arr[i] = (int) (Math.random() * 80_000_000); //生成一个[0, 8000000) 数
|
||||
}
|
||||
// int[] arr = {4, 9, 1, 8, 6, 2};
|
||||
|
||||
long startTime = System.currentTimeMillis();
|
||||
sort(arr, arr.length / 2);
|
||||
sort2(arr, arr.length / 2);
|
||||
System.out.printf("排序花费时间 %dms.", System.currentTimeMillis() - startTime);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue