1. 程式人生 > >排序演算法之希爾排序法(c#實現)

排序演算法之希爾排序法(c#實現)

希爾排序演算法是將陣列的所有元素按照一定增量d分組,對每組內的資料實行插入排序,之後不斷減小增量,每組內所包含的元素也越多,增量減少至1時,整個陣列被分成一組,插入排序結束後整個陣列的排序便完成。

演算法流程圖:


操作步驟:

初始時,有一個大小為 10 的無序序列。

(1)在第一趟排序中,令增量d = N / 2 = 5,即相隔距離為 5 的元素組成一組,可以分為 5 組。

(2)按照直接插入排序的方法對每個組進行排序。

(3)在第二趟排序中,我們把上次的 d 縮小一半,即 d= d / 2 = 2 (取整數)。這樣每相隔距離為 2 的元素組成一組,可以分為 2 組。

(4)按照直接插入排序的方法對每個組進行排序。

(5)在第三趟排序中,再次把 d 縮小一半,即d = d / 2 = 1。 這樣相隔距離為 1 的元素組成一組,即只有一組。

(5)按照直接插入排序的方法對每個組進行排序。此時,排序已經結束。

演算法實現:

public void shellsort(int[]a)
        {
            int d = a.Length / 2;
            while(d>=1)
            {
                for(int i=0;i<d;i++)
                {
                    for(int j=i+d;j<a.Length;j+=d)
                    {
                        int temp=a[j];//儲存和其比較的上一個a[x];
                        int loc = j;
                        while (loc - d >= i&&temp < a[loc - d])//&&j-d>=i
                        {
                            a[loc] = a[loc - d];
                            loc = loc - d;
                        }
                        a[loc] = temp;
                    }
                }
                //一次插入排序結束,縮小d的值
                d = d / 2;
            }
        }