问题如下:用希尔排序进行从大到小排序
分析问题:首先看一下这个题,经过读题我们得知使用方法是希尔排序,先说一下什么是希尔排序:也称递减增量排序算法,是插入排序的一种更高效的改进版本。希尔排序是非稳定排序算法。希尔排序是基于插入排序的以下两点性质而提出改进方法的:插入排序在对几乎已经排好序的数据操作时,效率高,即可以达到线性排序的效率但插入排序一般来说是低效的,因为插入排序每次只能将数据移动一位。代码如下:
#include <stdio.h>
int shsort(int s[],int n)
{
int i,j,d;
d=n/2;
while(d>=1)
{
for(i=d+1;i<=n;i++)
{
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];
}
d=d/2;
}
}
int mian()
{
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");
}