add sort coast time test

dev
ehlxr 2021-06-29 21:21:03 +08:00
parent bf4d8c5fb9
commit 7cfdaab3d0
2 changed files with 63 additions and 13 deletions

View File

@ -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);
}
}

View File

@ -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);
}