插入排序

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