插入排序
/**
插入排序算法
项数n 最大次数c
n=1 c=0
n=2 c=1
n=3 c=0+1+2
n=4 c=0+1+2+3
n=n c=0+1+2+..+(n-1)
相当于等差数列求和
和 = (首项+尾项)*项数/2
总结
c = [0+(n-1)]*n/2 = (n²-n)/2
这是一个抛物线
y
^
/|\
| .
| .
| .
| .
| .
------------|---.------------------>x
0 | 1
|
|
|
|
|
|
*/
public static void main(String[] args) {
// int[] arr = {8,2,3,6,9,1,11,30,27,52,21,4};
// sort(arr);
//
// System.out.println(Arrays.toString(arr));
int[] arr = new int[100000];
for(int i=0;i<arr.length;i++){
arr[i] = arr.length - i;
}
long start = System.currentTimeMillis();
sort(arr);
System.out.println("耗时:"+(System.currentTimeMillis()-start));
}
public static void sort(int[] arr){
for(int i=1;i<arr.length;i++){
int j = i-1;
int cur = arr[i];
while(j>=0&&cur<arr[j]){
arr[j+1] = arr[j];
arr[j] = cur;
j--;
}
}
}
经过测试 长度为10万的数组需要 8秒的时间