折半插入排序:与直接插入排序相比,不同之处在于,直接插入在插入时,是要和前面的子序列挨个比较,而折半插入是用折半的方法,来确定要插入的元素的合适位置。
#include<stdio.h>
#include<stdlib.h>
int main()
{
int i,n,j,k,temp;
scanf("%d",&n);
int a[n];
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=1;i<n;i++)
{
int low=0,high=i-1,mid;
while(low<=high)
{
mid=(high+low)/2;
if(a[i]>a[mid]) low=mid+1;
else high=mid-1;
}
temp=a[i];
for(j=i;j>high+1;j--)
a[j]=a[j-1];
a[j]=temp;
}
for(i=0;i<n;i++)
printf("%d ",a[i]);
return 0;
}