//3.1 简单插入排序
private static void insertSort(int[] a) {
//依次把每元素拿来插入到有序序列当中(从第2个开始,到最后就行)
for(int i=0;i<a.length-1;i++){//趟数
//待插入的数
int temp = a[i+1];
//下面这一段其实是决定temp坐的位置(j+1) 及 让其它比temp大的数挪动一个位置
int j=i;
while(a[j]>temp){//如果有序序列中"第j位置的数" 比 "待插入的数" 大,则把 a[j]往后挪一个位置
a[j+1] = a[j];//让a[j]挪到j+1的位置
j--;
if(j<0){
break;
}
}
//让temp坐在第j个数的后面即 j+1的位置
a[j+1] = temp;
}
}
//3.2 加入二分查找的插入排序
private static void binaryInserSort(int[] a) {
for(int i=0;i<a.length-1; i++){//趟数,每一趟是插入第"i+1"个数
//待插入的数
int temp = a[i+1];
//用二分来决定待插入的位置
int low=0;
int high=i;
int mid;//中间位置
while(low<=high){
mid = (low+high)/2;
//用中间位置的元素和当前待插入的数(temp)比较
if(a[mid]>temp ){ //落在左半区
high = mid-1;
}else{//落在右半区
low = mid+1;
}
}
//上面这一段只是找到插入位置
//移位,把待插入位置腾出来
for(int j=i; j>high; j--){
a[j+1] = a[j];
}
//让temp坐在第high+1的位置
a[high+1] = temp;//a[low] = temp;
}
}