C++二分插入排序
作者:网络转载 发布时间:[ 2015/11/3 14:14:37 ] 推荐标签:测试开发技术 .NET
经过上几篇对排序算法的了解,我们发现,所谓的排序也是确定一个数组中每个元素的位置,然后对号入座,其过程也是找到该元素的位置。确定位置,使用二分法可以达到很高的效率,我们将他应用到插入排序中算是对上篇中排序的一种优化,能提高效率。
____________________________________________________________________________________________________
基本思想:
与上篇中的插入排序类似分已排序和未排序部分,然后将未排序部分元素逐个插入,但是插入的过程不同,需要每次求一个中间位置,和中间位置元素比较大小,然后根据大小情况,将高位左移或者将低位右移,再求中间元素比较,直到找到合适位置(也是说使用二分法确定插入位置)后将其部分元素后移为待插入元素腾出空间,再插入该序列即可。
C++例子:只用C++演示
#include<iostream>
usingnamespacestd;
voidHalfSort(int*array,intLength)
{//定义低,高,中间值,待插入数据,插入位置
intlow,high,middle,temp,index,i,j;
for(i=1;i<Length;i++)//控制插入的元素,第一次从下标为1的元素开始
{//,将前面array[0]的当成已经排好序的数列,然后逐个插入
low=0;
high=i-1;
temp=array[i];
index=i;
if(array[0]<temp&&array[i-1]>temp)//与头尾相比较如果没在范围类省略循环
{
while(low<=high)//二分法查找插入位置
{
middle=(low+high)/2;
if(array[middle]>temp)
{
high=middle-1;
}
else
low=middle+1;
}
//后确定位置index
index=low;
}
if(array[0]>=temp)//如果比第一个元素还小直接插到第一个位置
{index=0;}
if(array[i-1]<=temp)//如果比后一个元素还大直接插到后一个位置
{index=i;}
//向后移位腾出插入空间
for(j=i-1;j>=index;j--)
{array[j+1]=array[j];}
array[index]=temp;//插入
}
//输出
for(i=0;i<Length;i++)
{
cout<<array[i]
<<"";
}
cout<<endl;
}
voidmain()
{
intarray[]={63,4,24,1,3,15};
intLength=sizeof(array)/sizeof(array[0]);//计算长度
HalfSort(array,Length);
}_____________________________________________________________________________________________________________________________________________________________________
其实关于二分法排序,我查阅资料的时候代码中并没有if(array[0]<temp&&array[i-1]>temp),if(array[0]>=temp),if(array[i-1]<=temp)这样的判断语句,这是我自己加上的,因为如果没有这些判断语句的话,当让你排序的数列已经是有序数列的时候程序还是会经历一些不必要的循环,反倒不如上一篇中的直接插入排序了。
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11