1. 程式人生 > >資料結構 筆記:氣泡排序和希爾排序

資料結構 筆記:氣泡排序和希爾排序

氣泡排序的基本思想

-每次從後向前進行(假設為第i次),j = n -1 ,n- 2,...,i,兩輛比較 V[j-1]和V[j]的關鍵字;如果發生逆序,則交換V[j-1]和V[j].

template <typename T>
    static void Bubble(T array[], int len, bool min2max = true)
    {
        bool exchange = true;

        for(int i = 0;(i <len) && exchange;i++)
        {
            exchange = false;

            for(int j = len-1;j > i;j--)
            {
                if(min2max? (array[j] < array[j-1]) :(array[j] > array[j-1]) )
                {
                    Swap(array[j],array[j-1]);
                    exchange = true;
                }
            }
        }
    }

希爾排序的基本思想

-將待排序列劃分為若干組,在每一組內進行插入排序,以使整個序列基本有序,然後在對整個序列進行插入排序

template < typename T>
    static void Shell(T array[] , int len, bool min2max = true)
    {
        int d = len;

        do
        {
            d = d / 3 + 1;
            for(int i = d;i<len;i++)
            {
                int k = i;
                T e = array[i];

                for(int j=i-d;(j>=0) && (min2max? (array[j]>e) :(array[j] <e));j-=d)
                {
                    array[j+d] = array[j];
                    k = j;
                }

                if(k != i)
                {
                    array[k] = e;
                }
            }
        }while( d > 1);
    }

總結:

-氣泡排序每次從後向前將較小的元素互動到位

-氣泡排序是一種穩定的排序法,其複雜度為O(n^2)

-希爾排序通過分組的方式進行多次插入排序

-希爾排序是一種不穩定的排序法,其複雜度為O(n^ 3/2)