排序算法3----插入法

插入法的本质:

后面数j与前面数比较,然后找出最小的数,然后暂存,然后移位,然后插入。

类似于一个人来到一个队伍中,进行插队的场景,故美其名曰为插入法。

5 4 6 2 1 0

先将第1个数 5看做是一个对,第2个数来插队。 5>4,4必需插的在5前面 j=0;

4 5 看做一个对,6来插队,4<6 j=1;5<6 j=2; ,6插在5 后面,已经在5后面,故不需要动j=2

4 5 6 看做一个对 2 来插队。4>2,插队4 号前面,即0位置。 

2 4 5 6 看做一对,1来插队,i=5,1<2 必需插在2 前面,即0位置

·1 2 4 5 6 看做一对,i=6,0来插队,0<1,必需插1前面

void insert_sort(int a[],int n)
{
    int i=0,j=0;
   //进行N-1轮插入过程
    for(int i=1; i<n; i++)
    {
        //首先找到元素a[i]需要插入的位置
        int j=0;
        while( (a[j]<a[i]) && (j<i))
        {
            j++;
        }
        //将元素插入到正确的位置
        if(i != j)  //如果i==j,说明a[i]刚好在正确的位置
        {
            int temp = a[i];
            for(int k = i; k > j; k--)
            {
                a[k] = a[k-1];
            }
            a[j] = temp;
        }
    }


猜你喜欢

转载自blog.csdn.net/fengliang191/article/details/38639891