#if 0
//............................折半插入排序(二分法插入排序)
/*
折半插入排序的元素移动次数与直接插入排序相同,依赖于元素的初始排列,
折半插入排序所需附加存储空间和直接插入排序相同,但是折半插入排序减少了关键字的比较次数,而记录的次数不变。
折半插入排序是一种稳定的排序算法
*/
#include<iostream>
using namespace std;
#define N 10
void BinaryInsertSort(int a[],int left,int right)
{
int i,k,temp;
int low,high,middle;
for(i = left+1;i<=right;i++)
{
temp = a[i];
low = left;
high = i-1;
while(low<=high) //折半搜索查找位置
{
middle = (low+high)/2;
if(temp<a[middle]) //插入值小于中点值时,向左边缩小空间
high = middle -1;
else
low = middle+1; //否则,向右缩小空间
}
for(k = i-1;k>=low;k--) //待插入位置后面全部数后移一位
a[k+1]=a[k];
a[low]=temp;
}
}
int main()
{
int a[N];
//int a[N] = {10,4,1,8,7,5,3,11,6,12};
int i;
for(i = 0;i<N;i++)
cin>>a[i];
BinaryInsertSort(a,0,N-1);
for(i = 0;i<N;i++)
{
cout<<a[i]<<" ";
}
cout<<endl;
return 0;
}
#endif
排序--折半插入排序
最新推荐文章于 2018-08-30 11:53:16 发布