俏玖 发表于 2019-12-15 18:31

【笔记】菜鸟学算法(—)

插入排序
   通过不断与前一个数比较,交换位置来完成排序
    一组数据,sum{1,5,3,7,2},先拿出数字5,和第一个数字1比较,5比1大,位置不变;
拿出数字3,和前一个数字5比较,3比5小,将3和5交换位置,接着和前一个数字比较,3比1大,
位置不变;拿出数字7,7比5大,位置不变;拿出数字2,2比7小,交换位置,接着和前一个数字
5比较,2比5小,交换位置,接着和前一位数字3比较,2比3小,交换位置,接着和前一个数1比较
2比1大,位置不变,排序结束,sum{1,2,3,5,7}.
1,5,3,7,2 --> 1,5,3,7,2 --> 1,3,5,7,2 --> 1,3,5,7,2 --> 1,3,5,2,7 --> 1,3,2,5,7-->
1,2,3,5,7




for (int j = 1; j <5; j++)        //5是数组的长度
        {
                key = sum;                        //拿出后一个数
                m = j - 1;                                //定位到前一个数
                while(m>0&&sum > key)//判断是否挨个比较完
                {
                        sum = sum;//将前一个数给后一个数
                        m = m - 1;                        //定位到前一位的前一位数
                        sum = key;        //将后一位数给前一位
                }
               
        }



304775988 发表于 2019-12-15 22:34

另一个说法是冒泡算法

BlueMoonWolf 发表于 2019-12-15 22:58

插入排序可以理解为:
左边为已排序完了的。。。从右边开始取数和他左边的比,当比要取出的数大时,就往右边移动一个位置,再比较,直到找到比他小的值,再插在这个比他小的值的右边。


其实我觉得在写的时候,有几个要点要注意:
一个就是,一开始取左边第一个为已排序完的,因为是一个,所以也算排序完的了。
一个是拿来比较的值是从第二个开始来比的,下标是1开始的。。

这两个我倒是经常弄忘。。。

xiaohui888 发表于 2019-12-15 23:31

5个成员,比较7次才排序完成。不应该是几个成员就比较几次就能排序完成的么??

小胖兴 发表于 2020-7-3 19:26

因为接触算法不多,之前听过还有自己用过的就冒泡排序,这个应该也算是冒泡排序的一种吧???

哈哈哈,小犊子 发表于 2020-7-3 20:04

感觉稍微改一下就是插入排序了
页: [1]
查看完整版本: 【笔记】菜鸟学算法(—)