-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathInsertionSort.java
63 lines (47 loc) · 1.65 KB
/
InsertionSort.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
import java.util.Arrays;
public class InsertionSort {
private InsertionSort(){}
public static <E extends Comparable<E>> void sort(E[] arr){
for(int i = 0; i < arr.length; i ++){
// 将 arr[i] 插入到合适的位置
// for(int j = i; j - 1 >= 0; j --){
// if(arr[j].compareTo(arr[j - 1]) < 0)
// swap(arr, j - 1, j);
// else break;
// }
for(int j = i; j - 1 >= 0 && arr[j].compareTo(arr[j - 1]) < 0; j --)
swap(arr, j - 1, j);
}
}
public static <E extends Comparable<E>> void sort2(E[] arr){
for(int i = 0; i < arr.length; i ++){
// 将 arr[i] 插入到合适的位置
E t = arr[i];
int j;
for(j = i; j - 1 >= 0 && t.compareTo(arr[j - 1]) < 0; j --){
arr[j] = arr[j - 1];
}
arr[j] = t;
}
}
private static <E> void swap(E[] arr, int i, int j){
E t = arr[i];
arr[i] = arr[j];
arr[j] = t;
}
private static <E extends Comparable<E>> boolean isSorted(E[] arr){
for(int i = 1; i < arr.length; i ++)
if(arr[i - 1].compareTo(arr[i]) > 0)
return false;
return true;
}
public static void main(String[] args){
int[] dataSize = {10000, 100000};
for(int n: dataSize){
Integer[] arr = ArrayGenerator.generateRandomArray(n, n);
Integer[] arr2 = Arrays.copyOf(arr, arr.length);
SortingHelper.sortTest("InsertionSort", arr);
SortingHelper.sortTest("InsertionSort2", arr2);
}
}
}