#include<stdio.h>
//希尔排序法
//希尔排序法又称缩小增量法,属于插入类排序,是将整个无序子序列分别进行插入排序的方法
//先取一个整数d1<n,把所有序号相隔d1的数组元素放一组,组内进行直接插入排序;然后取d2<d1
//重复上述分组和排序操作;直至di=1.即所有记录放进一个组中排序为止
void shsort(int s[],int n) //自定义函数shsort
{
int i,j,k,d;
d=n/2; //确定固定增量值
while(d>=1)
{
for(i=d+1;i<=n;i++) //数组下标从d+1开始进行直接插入排序
{
s[0]=s[i]; //设置监视哨
j=i-d; //确定要进行比较的最右边的元素
while((j>0)&&(s[0]<s[j]))
{
s[j+d]=s[j]; //数据右移
j=j-d; //向左移动固定增量的位置
}
s[j+d]=s[0]; //在确定的位置插入s[i]
//测试
printf("输出中间结果:\n");
for(k=1;k<=10;k++)
printf("%5d",s[k]);
printf("\n");
}
d=d/2;
}
}
void main()
{
int a[11],i;
printf("请输入10个整数:\n");
for(i=1;i<=10;i++)
scanf("%d",&a[i]); //从键盘中输入十个数据
shsort(a,10);
printf("排序后的顺序是:\n");
for(i=1;i<=10;i++)
printf("%5d",a[i]);
printf("\n");
}
希尔排序
最新推荐文章于 2025-01-21 00:21:24 发布
