笔记:既然是在有序表中确定插入位置,因此可以在寻找插入位置时,就可以采用折半查找的方法来确定。
#include<stdio.h>
void binaryInsertSort(int a[],int n)
{
int i=0;
for(i=2;i<=n;i++)
{
a[0]=a[i];//保存待插入元素
int low=1;
int high=i-1;
while(low<=high)
{
int mid=(low+high)/2;
if(a[0]>a[mid])
low=mid+1;//插入位置位于高半区
else
high=mid-1;
}
int j=0;
for(j=i-1;j>=high+1;j--)//后移元素,留出插入空位
{
a[j+1]=a[j];
}
a[high+1]=a[0];//在适当位置插入
}
}
int main()
{
int n;
int a[10000];
scanf("%d",&n);
int k=0;
for(k=1;k<=n;k++)
{
scanf("%d",&a[k]);
}
binaryInsertSort(a,n);
int z=1;
for(z=1;z<=n;z++)
{
printf("%d ",a[z]);
}
return 0;
}