希尔排序算法(C语言实现)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/peng_apple/article/details/79612526
一、希尔排序
由希尔在1959年提出,设定一个元素间隔增量gap,将参加排序的序列按这个间隔分成若干个子序列,对子序列用一般排序法排序与冒泡排序的思想相似,即将两数比较交换;冒泡法是相邻两数比较交换,而希尔排序只有当希尔间隔值为1时才与冒泡法完全一样,所以可以跟据希尔间隔值的不同进行分组排序最优间隔值是至今未解决的数据难题,一般用折半间隔,直到间隔为1;如果直接将希尔间隔设为1效率则是最低的,需要多次遍历。

二、希尔排序处理过程

将固定间隔值两两比较交换,若干次后,这个序列将成为一个有序序列对分好组的子序列采用两两比较交换,循环比较一遍之后序列不一定有序,所以对于子序列可能会进行多次循环比较,直到排好序。

三、图解


四、demo

void shellsort(int *k,int n)
{
    int i, j, temp, gap = n;
    while(gap > 1)
    {
        gap = gap/2;                /*增量缩小,每次减半*/
        for(i=0;i<n-gap;i++) //n-gap 是控制上限不让越界
        {
            j = i + gap;    //相邻间隔的前后值进行比较
            if(k[i]>k[j])
            {
                temp = k[i];
                k[i] = k[j];
                k[j] = temp;
            }
        }
    }
}

猜你喜欢

转载自blog.csdn.net/peng_apple/article/details/79612526