c語言實現希爾排序算法

1.算法簡介

   希爾排序(Shell Sort)是插入排序的一種,它是針對直接插入排序算法的改進。該方法又稱縮小增量排序,因DL.Shell於1959年提出而得名。希爾排序實質上是一種分組插入方法。它的基本思想是:對於n個待排序的數列,取一個小於n的整數gap(gap被稱爲步長)將待排序元素分成若干個組子序列,所有距離爲gap的倍數的記錄放在同一個組中;然後,對各組內的元素進行直接插入排序。 這一趟排序完成之後,每一個組的元素都是有序的。然後減小gap的值,並重復執行上述的分組和排序。重複這樣的操作,當gap=1時,整個數列就是有序的。

2.源碼實現

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

//希爾排序算法
void shell_sort(int n, int *u)
{
        int gap;
        int tmp;
        int i;
        int j;

        for(gap=n/2 ; gap>0; gap/=2)
        {
                for(i=gap; i<n; i++)
                {
                        tmp = u[i];

                        for(j = i; j >= gap && tmp < u[j-gap]; j -= gap)
                        {
                                u[j] = u[j-gap];
                        }

                        u[j] = tmp;
                }
        }
}

int main()
{
        int u[] = {1, 9, 7, 0, 6};
        int n = 5;
        int i = 0;

        shell_sort(n, (int *)u);

        for(i=0; i<n; i++)
        {
                printf("%d ", u[i]);
        }

        putchar('\n');

        return 0;
}

3.編譯源碼

$ gcc -o test test.c

4.運行及結果

$ ./test
0 1 6 7 9 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章