在插入排序中使用二分查找。
BinarySearch(A,low,high,target)
{
if(low<high)
mid=(low+high)/2
if(A[mid]>target) return BinarySearch(A,low,mid-1,target)
else if(A[mid]<target) return BinarySearch(A,mid+1,high,target)
else
if(A[mid]>target) return mid
else
return mid+1
}
InsertionSort-BinarySearch()
{
for (j=1;j<N;j++)
key= A[j]
index=BinarySearch(A,0,j-1,key)//返回元素A[j]在已排序子数组A[0...j-1]中应该在的位置。
for(i=j;i>index;i--)
A[i]=A[i-1] //数组中比key大的全部右移一位。原数组全部逆序时,需移动(n-1)+(n-2)+.....+ //(n/2)。所以时间复杂度为 o(n^2).
A[index]=key //A[j]原本的值key插入到数组下标为index位置中。
}
算法分析:在最坏情况下,即 原数组全部逆序时 时间复杂度为 o(n^2)