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; //将插入数,插进正确位置 } }