【演算法導論】插入排序

來源:互聯網
上載者:User

標籤:一個   while   return   insert   代碼   bsp   nbsp   pre   注釋   

沒辦法就是這麼沒原則,又開了個坑。每天看點書,不管什麼書。

1. 需求:

  輸入:n個數的一個序列(a1, a2,  a3……an)

  輸出: 輸出序列的一個排列(a1‘, a2‘, a3‘ ……an‘),滿足a1‘ <=  a2‘ <= a3‘ ……<= an‘

2. 圖示:

  

3. 虛擬碼 

INSERTION-SORT(A)for j=2 to A.length    key = A[j]    i = j-1    //把A[j]插入到有序數組 A[1...j-1].    while i > 0 and A[i] > key        A[i+1] = A[i]        i = i -1    A[i + 1] = key

 

4. 理解

  演算法導論不愧是本好書啊,看這虛擬碼的注釋多精髓,

  把 A[j] 插入到有序數組 A[1...j-1]

  j是從2開始的,也就是說我們第一次就是做兩個數的排序,這樣就是比較A1 和 A2.,這個就容易了。這樣得到A的前兩個數A1 A2就是有序的

  當J = 3的時候,我們要做的就是在  * A1 * A2 * 三個星號中找到A3的位置(因為A1 <= A2 已經確定了),根據就近原則,我們先用A3跟A2比,如果比A3 比 A2小,就再跟A1比(如果A3比A2大,那肯定就比A1大了),在跟,然後得到一個新的有序序列A1 A2 A3

  當J = 4的時候   我們要做的就是在  * A1 * A2 *  A3  * 四個個星號中找到A4的位置(因為A1 <= A2 <= A3 已經確定了),根據就近原則,先跟A3比,然後A2, A1, 然後得到一個新的有序序列A1 A2 A3 A4

  以此類推

 

5.代碼。因為虛擬碼的數組下標是從1開始的,所以一些範圍判定要改一下

java  

//javavoid insertionSort(int[] A) {        for(int j = 1, len =A.length; j < len; j++) {            int key = A[j];            int i = j-1;            while(i > -1 && A[i] > key) {                A[i+1] = A[i];                i = i-1;            }            A[i+1] = key;        }        return A;}//    input: 5 4 2 9 4 12 6 8 1 3 35//    output: 1 2 3 4 4 5 6 8 9 12 35

 

C

void insertion_sort(int arr[], int len){        int i, j, key;        for(i = 1; i< len; i++)    {        key = arr[i];                j = i - 1;                while(j > -1 && arr[j] > key)        {            arr[j+1] = arr[j];                        j--;         }                  arr[j+1] = key;    } } 

python

def insertion_sort(arr):    le = len(arr)    for i in range(1, le):        key = arr[i]        j = i - 1        while j > -1 and arr[j] > key:            arr[j+1] = arr[j]            j -= 1        arr[j+1] = key

 

 

 

 

  

 

【演算法導論】插入排序

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.