#include<iostream>
using namespace std;
void BS_SIS(int array[],int n)
{
int i,low,high,mid,j;
for(i=2;i<n;i++)
{
array[0]=array[i]; //必须先存储好
low=1;
high=i-1;
while(low<=high)
{
mid=(low+high)/2;
if(array[i]<array[mid])
high=mid-1;
else
//if(array[i]>array[mid])
low=mid+1;
}
/*t=array[mid];
array[mid]=array[i];
array[i]=t;*/
for(j=i-1;j>=high+1;j--) //必须要向后移动,不能只交换位置
array[j+1]=array[j];
array[high+1]=array[0];//array[high+1]=array[i]不能这样写,因为后面array[i]中的数据发生了改变,不在是原来的数据
}
}
int main()
{
int n,i;
cin>>n;
int* p;
p=new int [n];
for(i=1;i<n;i++)
cin>>p[i];
BS_SIS(p,n);
for(i=1;i<n;i++)
cout<<p[i]<<" ";
cout<<endl;
return 0;
}
c++实现折半插入排序
最新推荐文章于 2021-08-27 14:07:59 发布