add sort coast time test
This commit is contained in:
@@ -53,23 +53,42 @@ public class InsertSort {
|
|||||||
break;
|
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) {
|
public static void sort2(int[] arr) {
|
||||||
for (int i = 1; i < arr.length; i++) {
|
for (int i = 1; i < arr.length; i++) {
|
||||||
int value = arr[i]; // 下一个元素(新元素)
|
int temp = arr[i]; // 下一个元素(待排序元素)
|
||||||
int j = i - 1; // 已排序的最后一个元素下标
|
int j = i - 1; // 已排序的最后一个元素下标
|
||||||
while (j >= 0 && arr[j] > value) {
|
while (j >= 0 && arr[j] > temp) {
|
||||||
arr[j + 1] = arr[j]; // arr[j] 后移
|
arr[j + 1] = arr[j]; // arr[j] 后移
|
||||||
j--;
|
j--;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (j + 1 != i) {
|
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, 1, 8, 6, 2
|
||||||
// 4, 9, 9, 8, 6, 2
|
// 4, 9, 9, 8, 6, 2
|
||||||
// 4, 4, 9, 8, 6, 2
|
// 4, 4, 9, 8, 6, 2
|
||||||
@@ -89,13 +108,15 @@ public class InsertSort {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
int[] arr = new int[80000];
|
int[] arr = new int[80_000];
|
||||||
for (int i = 0; i < 80000; i++) {
|
for (int i = 0; i < 80_000; i++) {
|
||||||
arr[i] = (int) (Math.random() * 8000000); //生成一个[0, 8000000) 数
|
arr[i] = (int) (Math.random() * 8_000_000); //生成一个[0, 8000000) 数
|
||||||
}
|
}
|
||||||
|
// int[] arr = {4, 9, 1, 8, 6, 2};
|
||||||
|
|
||||||
|
|
||||||
long startTime = System.currentTimeMillis();
|
long startTime = System.currentTimeMillis();
|
||||||
sort2(arr);
|
sort3(arr);
|
||||||
System.out.printf("排序花费时间 %dms.", System.currentTimeMillis() - startTime);
|
System.out.printf("排序花费时间 %dms.", System.currentTimeMillis() - startTime);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -65,6 +65,34 @@ public class ShellSort {
|
|||||||
sort(arr, gap / 2);
|
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) {
|
public static void swap(int[] arr, int i, int j) {
|
||||||
int tmp = arr[i];
|
int tmp = arr[i];
|
||||||
arr[i] = arr[j];
|
arr[i] = arr[j];
|
||||||
@@ -72,13 +100,14 @@ public class ShellSort {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
int[] arr = new int[80000];
|
int[] arr = new int[800_000];
|
||||||
for (int i = 0; i < 80000; i++) {
|
for (int i = 0; i < 800_000; i++) {
|
||||||
arr[i] = (int) (Math.random() * 8000000); //生成一个[0, 8000000) 数
|
arr[i] = (int) (Math.random() * 80_000_000); //生成一个[0, 8000000) 数
|
||||||
}
|
}
|
||||||
|
// int[] arr = {4, 9, 1, 8, 6, 2};
|
||||||
|
|
||||||
long startTime = System.currentTimeMillis();
|
long startTime = System.currentTimeMillis();
|
||||||
sort(arr, arr.length / 2);
|
sort2(arr, arr.length / 2);
|
||||||
System.out.printf("排序花费时间 %dms.", System.currentTimeMillis() - startTime);
|
System.out.printf("排序花费时间 %dms.", System.currentTimeMillis() - startTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user