插入排序

3
6
8
13
21
34
35
47
59
x

綠色表示 小於 x,數組

紅色表示大於x,spa

21與34的界限是基於x的分界線code


如今將x插入已經排好序的數組中table


3
6
8
13
21
x
34
35
47
59

上圖是指望的結果:class

綠色的保持不變,紅色右移一位循環

因此咱們能夠令pos指向x的前一位,即59,數據

一一貫左循環,若pos 大於x, 則將其數據右移一位。word

一直循環到pos小於等於 x,即pos指向21tab

而後將(pos+1)的值 改成 xwhile


注意當x是插入數組的最小數時,還要防止pos 越界



3
6
8
13
21
34
35
47
59
x = 1


當pos循環到3時,比較後,還要pos 的位置還要在數組中



x=1
3
5
8
13
21
34
35
47
59




void insertSort( int A[], int begin, int end)    //A[begin] ~ A[end](不包括此項)
{
    for( int j = begin + 1; j < end ; j++)
        {
            int key = A[j];
            int i = j - 1;
            while( A[i] > key && i >= begin)
                {
                    A[i+1] = A[i];        //右移一位
                    i--;
                }
            A[i+1] = key;                //將插入數,插進正確位置
        }
}
相關文章
相關標籤/搜索