概述
算法即内功
二分插入排序基本思想:
思想和插入排序是一样的,只是在寻找插入位置时不一样。普通插入排序在寻找插入位置时从已有序的序列从尾到头遍历寻找插入位置。这样的遍历就会浪费大量的时间去比较。
这里我们其实应该很容易就能想到这种优化思想。因为待插入的是有序序列。我们为何不用更快的方法来寻找插入位置呢。在查找中我们学习了二分查找。正是要在序列有序的情况下使用。所以我们也采用这种思想去寻找插入位置,可以大量减少比较时间。
示例
如果是普通插入排序的话。25需要比较5次才能找到插入位置。而二分插入只需要比较四次。有优势的。
代码:
void insertSort(int a[],int n)
{
int low,high,mid,temp;
for(int i=0;i<n;i++)
{
low=0;
high=i-1;
mid=(low+high)/2;
temp=a[i];
while(high>=low)//high>=low继续寻找
{
if(temp>a[mid])//改变low和mid
{
low=mid+1;
mid=(low+high)/2;
}
else//改变high和mid
{
high=mid-1;
mid=(low+high)/2;
}
}
for(int j=i;j>low;j--)//把temp放到找到的位 {
a[j]=a[j-1];
}
a[low]=temp;
}
return;
}
这里其实有个问题的,为什么判断条件是>=而不是>,还有为什么都会放在low 的位置。也是值得细细思考的。希望有大佬评论告诉一下。
分享几张阔爱的娃娃头像!!!
哈哈哈,好看吧!
最后
以上就是威武饼干为你收集整理的经典算法学习(一)排序之二分插入排序的全部内容,希望文章能够帮你解决经典算法学习(一)排序之二分插入排序所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复