您的位置:首页 > 其它

排序-插入类排序-折半插入排序

2016-01-18 22:40 183 查看

上一篇说了插入类排序思想,并且说了直接插入排序,这篇说说折半插入排序,其实看字面意思就能想到了,折半大家都能想到折半查找了,其实就是这个意思,在上一篇直接插入排序我们是基于顺序查找的方式进行插入排序,而这次,其实就是用折半查找方式查找出待插入的位置,然后进行后移,最后进行插入

#include<stdio.h>
int main(void)
{

//设置数组长度为9,,0下标元素用来,备份待插入的值
int num[9] = { 0,33,12,25,46,33,68,19,80 };
int i, j, mid, right, left;    //折半查找时候,right代表有序序列折半左半边际,right有序序列右边边际
for ( i = 2; i < 9; i++)
{
if (num[i] < num[i-1])
{
num[0] = num[i];
left = 1;
right = i - 1;
while (left <= right)   //当条件停止的时候,就是找到位置的时候
{
mid = (right + left) / 2;
if (num[0] < num[mid])  //如果比中间值还小,那就继续往前插
{
right = mid - 1;
}
else
{
left = mid + 1;
}
}
for (j = i - 1; j >= left; j--)   //这里由于上面条件left <= right的限制,所以这里是大于等于left
//当然也可以写成 大于right   开始向后移动
{
num[j + 1] = num[j];
}
//插入到合适位置
num[left] = num[0];
}

}
for (i = 1; i < 9; i++)
{
printf("%d ", num[i]);
}
getchar();
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息