插入排序 算法

来源:互联网 发布:mac怎么清理缓存 编辑:程序博客网 时间:2024/04/28 15:57

今天,整理一下插入排序, 其实一天掌握一种排序也不错, 毕竟算法是思考与理解性的东西。一次性能听懂,但基本都是当时懂了,过几天就没有办法重现了,这点至少对于我来说,在学习二叉树是体现的尤为明显。

大家都知道,只有一个数时不用排序, 

1.插入排序, 从第二个数开始,先将第二个数做一个副本放在一旁(变量中)。

2.第二个数同前一个数比较,小于则用前一个数覆盖第二个数, 然后将副本放在前一个数前面

3.再将第三个数做一个副本取出,第三个数同前一个数比较,小于则用前一个数覆盖第三个数(此时第二个数位置空闲), 然后用副本同前一个数的前一个数比较,如果小于,则用前一个数的前一个数覆盖在原本的第二个位置上(此时第一个位置空闲), 将副本放入即可。

4.将数组中接下来的数依次做与3类似步骤,以3类推将副本往前作比较。直到副本不小于比较的数则该轮插入结束

5.重复4步骤,直到最后一个数

现在就用C实现一次

#include <stdio.h>

int main(void) {

    int a[10] = {5,1,2,4,9,8,7,6,3,0};

    int i, j, k;

        for(i = 1; i < 10; i++) {

            for(j = i; j > 0; j--) {

            int data;

            if(a[j-1] > a[j]) {

                data = a[j];

                a[j] = a[j-1];

                a[j-1] = data;

            }

        }

    }

    for(k = 0; k < 10; k++)

        printf("%d ", a[k]);

    printf("\n");

    return 0;

}

还有一种插入排序的写法, 将判断条件都写在for

#include <stdio.h>

int main(void) {

    int a[10] = {5,1,2,4,9,8,7,6,3,0};

    int i, j, k;

        for(i = 1; i < 10; i++) {

        var = a[i];

        for(j = i; j > 0 && var < a[j -1]; j--) {   /*此写法重点在此处*/

            a[j] = a[j - 1];

            a[j - 1] = var;        

        }

    }

    for(k = 0; k < 10; k++)

        printf("%d ", a[k]);

    printf("\n");

    return 0;

}

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 七个月的宝宝老是拉肚子怎么办 6个月宝宝拉肚子怎么办 没满月宝宝吐奶怎么办 八个月宝宝有点拉肚子怎么办 4个月宝宝拉水怎么办 2岁宝宝消化不好拉肚子怎么办 两岁宝宝老拉肚子怎么办 2岁宝宝拉肚子老不好怎么办 2岁宝宝一直拉肚子不好怎么办 5天新生儿拉稀水怎么办 4天新生儿拉稀水怎么办 新生儿40天拉稀水怎么办 一周多的宝宝拉肚子怎么办 出生半个月的宝宝拉肚子怎么办 刚出生几天的宝宝拉肚子怎么办 刚出生的宝宝拉肚子怎么办 出生八天的宝宝拉肚子怎么办 刚出生婴儿拉水怎么办 三岁宝宝一直吐怎么办 3岁宝宝一直吐怎么办 5个月宝宝一直吐怎么办 新生儿睡反了觉怎么办 吃母乳奶流量大怎么办 两个月宝宝有痰怎么办 婴儿瞌睡睡倒了怎么办 侧切伤口崩开了怎么办 脐带30天未脱落怎么办 洗眉结痂不掉怎么办 新生宝宝生殖器下面破皮怎么办 脐带未脱落渗血怎么办 车停店门口贴发单怎么办 有人要打我我该怎么办 很笨怎么办工作做不好 脸被电焊烤了疼怎么办 脸过敏痒的不行怎么办 领导想让你辞职怎么办 领导强吻我了怎么办 赫曼夏天温度高怎么办 近视看3d电影怎么办 有声挂图撕坏了怎么办 主机没有放光盘的设备怎么办