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; //將插入數,插進正確位置 } }