直接插入排序演算法

曹祥銘-Charles發表於2018-12-30

What?

將待排序列分為有序數列和無序數列,將無序數列中的數,與有序數列的數進行比較,將其根據大小插入有序數列,從而完成排序。

how?

待排序列:57,42,39,20

劃分數列:

有序數列 | 無序數列

          57 | 42,39,20

外一趟:

         42<57   true

有序數列 | 無序數列

     42,57 | 39,20

外二趟:

       內一趟:

         39<57   true

       內二趟:

         39<42   true

有序數列 | 無序數列

  39,42,57 | 20

外三趟:

       內一趟:

        20<57    true

 

       內二趟:

        20<42    true

 

       內三趟:

        20<39    true

有序數列 | 無序數列

  20,39,42,57 |

排序完成!

程式碼

//定義哨兵
int temp;
//外迴圈
for (int i = 1; i < data.Count; i++)//i=1.及將i=0這個數作為有序數列,i=1這個數作為無序數列的第一個數
{
    int j = i;
    temp = data[i];//將無序數列的第一個數,作為哨兵,拿著哨兵與有序數列的所有數進行比較
    //內迴圈while就是實現這個過程的。
    while (j > 0 && temp < data[j - 1])// 當哨兵這個數小於它前面的那個數時。
    {
        data[j] = data[j - 1];//將大數的索引值加1;
        j--;//減少迴圈的次數
    }
        data[j] = temp;//由於此時j已經減小,所以將哨兵資料插入到對應位置

}
            

 

相關文章