常用排序算法簡介

目錄
[toc]

說明:本博客所有圖片來自書籍《算法導論》,在此感謝本書作者!

下面簡單介紹一下插入、歸併、堆排序、快速排序等常用排序算法。

插入排序

原理介紹
顧名思義,插入排序即將沒有排好順序的數據插入到已經排好順序的數據中。插入排序類似我們玩撲克牌,如圖1所示,例如2/4/5/10是已經排好的序列,那麼新來了一個數字7,從最後面數字10開始找,7小於10那麼繼續與前面的數字比較,7大於5,因此7排在5的後面,即將7插入在5的後面。

圖片名稱 圖1 插入排序示意圖 **例子講解** 圖2爲插入排序的一個例子。原始數組A=[5,2,4,6,1,3],矩陣的上面是數組的上標。 1. 首先(a)中位置2與位置1比較大小,2小於5,交換位置,如(b); 2. 然後(b)中位置3與位置2比較大小,4小於5,交換位置,接着位置2與位置1比較大小,4大於2,停止,如(c);、 3. 依次類推,直到數組排序完成,如(f)。
圖片名稱 圖1 插入排序示意圖 **插入排序升序僞代碼**
//數組下標從0開始
insertion_sort(A)
{   //A是一個數組
    for i = 1:A.Length-1  
    {    //A.Length是數組的長度
        key = A[i]; //記錄新插入的數據
        j = i-1;
        while(key<A[j]&&j>=0)
        {
            A[j+1] = A[j]; //前一個數移動到後一個位置
            --j;
        }
        A[j+1] = key;  //將新數據插入到新的位置
    }
}

插入排序總結
從僞代碼直到,插入排序不需要複製數組,是原址的( in place)。插入排序的時間複雜度爲T(n) = O(n^2)。

今天暫時到這裏,明天更新歸併排序。

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