對於插入排序,如果比較操作的代價比交換操作大的話,可以採用二分查找法來減少比較操作的次數,我們稱爲二分插入排序
算法描述:
在直接插入排序的基礎上,利用二分(折半)查找算法決策出當前元素所要插入的位置。
二分查找:
1.找到中間元素,如果中間元素比當前元素大,則當前元素要插入到中間元素的左側;
2.否則,中間元素比當前元素小,則當前元素要插入到中間元素的右側。
3.找到當前元素的插入位置 i 之後,把 i 和 high 之間的元素從後往前依次後移一個位置,然後再把當前元素放入位置 i。
代碼
private static void insertSort2(int[] a) {
for(int i=0;i<a.length-1;i++){
int temp = a[i+1];
int low = 0;
int high = i;
int mid;
while(low<=high) {
mid = (low+high)/2;
if (a[mid]>temp) {
high = mid-1;
}else{
low = mid+1;
}
}
for(int j=i;j>=high+1;j--){
a[j+1]=a[j];
}
a[high+1]=temp;
}
}