排序算法2–(折半插入排序)
一、算法基本思想
二分插入法与直接排序类似,只是在确定插入位置的方法是用二分法,即从第0个数据开始依次折半与待插入的数据进行比较直到找到合适的位置。
二、算法实现
2.1 伪代码实现
暂无
2.2 C语言代码实现
//折半插入排序
void BInsertSort(int a[], int n)
{
int i,j,low,high;
for(int i =2;i<=n;i++){
A[0]=A[1];
low=1;
high = i-1;
while(low<=high){ //折半查找
mid = (low+high)/2;
if (a[mid]>temp) high=mid-1;
else low=mid+1;
}
for(int j=i;j>low;j--) //统一后移元素,空出插入位置
a[j] = a[j-1];
a[low] =temp;
}
}
三、复杂度分析
3.1 空间复杂度
仅使用了常数个辅助单元,因而空间复杂度为O(1)
3.2 时间复杂度
折半插入排序仅减少了比较元素的次数,约为O(nlog2^n),该比较次数与待排序初始状态无关,仅取决于表中的元素个数n;而元素的移动次数未改变,它依赖于待排序表的初始状态。因此复杂度依然为O(n2)。
3.3 稳定性
稳定
3.4 适用性
适用于数据量不大的排序表