插入排序——二分插入排序
- 在一个有序表中进行插入与排序,查找采用二分查找法。
代码
void InsertSort(int a[],int n)
{
int i,j,low,high,mid;
int temp;
for(i=1;i<n;i++)
{
temp = a[i];
low = 0;
high = i-1;
while(low<=high)
{
mid = (low+high)/2;
if(temp<a[mid])
high = mid-1; //说明temp应插入前半区
else low = mid + 1; //说明temp应插入后半区
}
for(j = i-1;j>high;j--)
{
a[j+1] = a[j];
}
a[high+1]=temp;
}
}
和直接插入比较
- 直接插入和二分插入排序只是在关键字比较次数上有差异,直接插入采用顺序查找,而二分插入采用二分查找。
- 直接插入与二分插入移动的次数相同。
- 时间复杂度位O(n^2),同直接插入。