希尔排序
希尔排序又称为缩小增量排序,是一种插入排序,是直接插入排序的升级版。
该方法的基本思想是:先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的元素组成的)分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序。因为直接插入排序在元素基本有序的情况下(接近最好情况),效率是很高的,因此希尔排序在时间效率上有较大提高。
void shellSort(int num[],int n)
{
int gap = n;
int temp;
int i,j;
do
{
gap = gap/2;
for(i = gap;i < n;i++)
{
if(num[i] < num[i - gap])
{
temp = num[i];
for( j = i - gap; j >=0;j-=gap)
{
if(num[j] > temp) num[j + gap] = num[j ];
else break;
}
num[j + gap] = temp;
}
}
}while(gap > 1);
}
int main()
{
int i = 0;
int num[]={10,9,8,7,6,5,4,3,2,1};
shellSort(num,10);
for(i = 0; i < 10;i++)
{
printf("%d ",num[i]);
}
return 0;
}
希尔排序是一种插入排序,是不稳定的。