活动地址:CSDN21天学习挑战赛
目录
一、折半插入算法说明
二、折半插入与直接插入算法的比较
三、算法流程
四、实例
五、总结
一、折半插入算法说明
每次从原有数据中取出一个数,插入到已经排好序的序列中,直到所有数据取完;这个过程和直接插入排序类似,不同点在于如何寻找数据插入的位置。
二、折半插入与直接插入排序算法比较
直接插入排序:有序序列从后到前逐一比较。
折半插入排序:利用有序序列中元素已排好的特点,使用折半查找算法确定要插入元素的位置。
三、算法流程
四、实例
输出:从小到大排列的数组元素
代码:
int main()
{
int a[6]={2,1,0,4,8,7};
int left,right,i,j;
int temp;
for(i=1;i<6;i++)
{
if(a[i]<a[i-1])
{
temp=a[i];
left=0;
right=i-1;
while(left<=right)
{
int mid=(left+right)/2;
if(a[mid]>temp)
right=mid-1;
else
left=mid+1;
}
for(j=i-1;j>=right+1;j--)
{
a[j+1]=a[j];
}
a[right+1]=temp;
}
}
for(i=0;i<6;i++)
cout<<a[i]<<" ";
return 0;
}
运行结果:
五、总结
折半插入排序算法是一种稳定的排序算法,比直接插入排序算法明显减少了关键字之间的比较次数,所以算法的速度比直接插入排序算法快,但两者元素的移动次数相同。所以两者的时间复杂度均为O(n^2)。折半插入排序的空间按复杂度O(1)。