基本思想:基本有序,小的关键字基本在前面,大的基本在后面,不大不小在中间。
在插入排序的基础上修改。插入排序每次步长都为1,而希尔排序引如增量序列gap,选择什么样的增量才是最好,目前还是个数学难题。
#include<stdio.h>
void shellSort(int k[],int n)
{
int i,j,temp;
int gap = n;
do
{
**gap = gap/3 +1;**
for(i = gap;i<n;i++)
{
if(k[i] < k[i - gap])
{
temp = k[i];
for(j = i -gap ;j>0 && k[j] > temp;j-=gap)
{
k[j+gap]=k[j];
}
k[j+gap]=temp;
}
}
}while(gap > 1);
}
int main()
{
int i,a[10]={-1,2,6,0,3,9,1,7,4,8};
shellSort(a,10);
for(i = 1;i<10;i++)
printf("%d",a[i]);
printf("\n\n");
return 0;
}