/*折半插入排序*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX 11
void input(int num[])//产生10个随机数 1......10(MAX-1)
{
int i;
srand((unsigned)time(NULL));
for(i=1; i<MAX; i++)
num[i]=rand()%100; //产生100以内的随机数
}
void output(int num[])
{
int i;
for(i=1; i<MAX; i++)
{
printf("%5d", num[i]);
if(0 == i%10)
printf("\n");
}
printf("\n");
}
void sort(int num[], int low, int high)//数组 1 10
{
int i, j, mid;
int l, h;
for(i=2; i<=high; i++)
{
l=low;
h=i-1;
num[0]=num[i]; //保存最新插入的数字
while(l<=h)
{
mid=(l+h)/2;
if(num[0]<num[mid]) //左边区间
h=mid-1;
else
l=mid+1; //右边区间
}
for(j=i; j>l; j--) /* move */
num[j]=num[j-1];
num[l]=num[0];
}
}
void main()
{
int num[MAX];
input(num);
printf("sort before...\n");
output(num);
sort(num, 1, MAX-1);
printf("sort after...\n");
output(num);
}
折半插入排序
最新推荐文章于 2024-08-28 23:11:16 发布