#include<stdio.h>
#define N 10
int a[N];
void Insertsort(int a[],int n)//折半插入排序
{
int low,high,mid;
int i,j;
for(i=2;i<=n;i++)//首先使用折半查找找到第i个数字的插入位置,最终low和high就是相等,即要插入元素的位置是high+1
{
low=1;
high=i-1;
a[0]=a[i];
while(low<=high)
{
mid=(low+high)/2;
if(a[mid]>a[0])
{
high=mid-1;
}
else
{
low=mid+1;
}
}
for(j=i-1;j>=high+1;--j)//然后将从high+1到i-1的元素进行向右移动,空出high+1的位置,然后将待排序数字插入
a[j+1]=a[j];
}
a[high+1]=a[0];
}
}
int main()
{
int n=N;
int i;
for(i=1;i<=N;i++)
{
scanf("%d",&a[i]);
}
Insertsort(a,n);
for(i=1;i<=N;i++)
{
printf("%d\t",a[i]);
}
return 0;
}
数据结构——折半插入排序
最新推荐文章于 2022-09-02 22:12:50 发布