#include<stdio.h>
void shsort(int s[],int n) {
int i,j,d;
d=n/2;/*每次插入排序将间隔为d的数分为一组*/
while(d>=1) {
for(i=d+1; i<=n; i++) {
s[0]=s[i];/*设置监视哨*/
j=i-d;
while(j>0&&s[j]>s[0]) {/*如果大于监视哨则右移d的单位,然后将前d位的数与监视哨比较*/
s[j+d]=s[j];
j=j-d;
}
s[j+d]=s[0];/*停下来的位置就是监视哨应该存放的位置*/
}
d=d/2;/*每次排序完,间隔减半再次进行插入排序,直到间隔为1*/
}
}
int main() {
int a[11],i,j;
printf("请输入十个数据:\n");
for(i=1; i<=10; i++)
scanf("%d",&a[i]);/*空出来0位,留给每次插入排序的监视哨*/
printf("原始数据:\n");
for(i=1; i<11; i++)
printf("%5d",a[i]);
shsort(a,10);
printf("\n排序后顺序:\n");
for(i=1; i<11; i++)
printf("%5d",a[i]);
printf("\n");
scanf("%d",&j);
}
希尔排序-直接插入排序的改进
最新推荐文章于 2021-06-01 16:23:24 发布