基础算法-选择排序、冒泡排序、插入排序

选择排序

在选择排序中 , 数字列表可分为两个子列表 已排序的和未排序的
他们通过假想的一堵墙分开。 求未排序子列表中的最小的元素并把它和未排序子列表中的第一个元素进行交换,经过每次选择和交换 两个子列表中假想的这堵墙向前移动一个元素

这样每次排序列表中将增加一个个元素 而未排序列表中将减少一个元素

一个含有n个元素的数字列表需要 n-1 轮排序来完成数据的重新排列

例 给出了对6个整数进行排序的步骤 23 78 45 8 32 56

左边为已排序 右边未排序 ‘|’ 用来表示假想的墙
初始列表 |23 78 45 8 32 56
第一轮 8 |23 78 45 32 56
第二轮 8 23 |78 45 32 56
第三轮 8 23 32|78 45 56
第四轮 8 23 32 45|78 56
第五轮 8 23 32 45 56|78

该算法使用两重循环 外层循环每次扫描时 迭代一次 , 内循环在未排序列表中求最小的元素

冒泡排序

在冒泡排序中 , 数字列表数字列表可分为两个子列表 已排序的和未排序的
在未排序列表中 最小的元素通过冒泡的方法选出 并移动到已排序的子列表中

冒泡 : 就像水泡从水中冒出的样子而得名 通过比较相邻的元素 移动并得出最小值或最大值

当把最小的元素移动到未排序列表左端时 中间的墙移动一位 已排序列表增加一个 未排序列表减少一个
左边为已排序 右边未排序 ‘|’ 用来表示假想的墙
初始列表 |23 78 45 8 32 56
第一轮 32 和 56比较 32小 不改变
8 和 32 比较 8 小 不改变
45 和 8 比较 45 大 改变相对位置 |23 78 8 45 32 56
75 和 8 比较 78 大 改变相对位置 |23 8 78 45 32 56
23 和 8 比较 23 大 改变相对位置 |8 23 78 45 32 56
比较完毕 墙前进一位
8 | 23 78 45 32 56

第二轮 32 和 56 比较 32 小 不改变
45 和 32 比较 45 大 改变相对位置 8 | 23 78 32 45 56
78 和 32 比较 45 大 改变相对位置 8 | 23 32 78 45 56
23 和 32 比较 23 小 不改变
比较完毕 墙前进一位
8 23 | 32 78 45 56

第三轮 45 和 56 比较 45 小 不改变
78 和 45 比较 78 大 改变相对位置 8 23 | 32 45 78 56
32 和 45 比较 32 小 不改变
比较完毕 墙前进一位
8 23 32 | 45 78 56

以此类推

最终结果 8 23 32 45 56 78

插入排序

插入排序 就像打扑克抓牌使用的方式一样 玩家将每张拿到的牌插入手中合适的位置 以便手中的牌以一定的顺序排列

左边为已排序 右边未排序 ‘|’ 用来表示假想的墙

初始列表 23 | 78 45 8 32 56 默认第一位是已排序 剩下都是未排序
第一轮 墙移动一位拿到78 23 78 | 45 8 32 56
第二轮 墙移动一位拿到45 插入23和78 的中间 23 45 78 | 8 32 56
第三轮 墙移动一位拿到8 插入最前面 8 23 45 78 | 32 56
第四轮 墙移动一位拿到32 插入23和45中间 8 23 32 45 78 | 56
第五轮 墙移动一位拿到56 插入45和78中间 8 23 32 45 56 78 |

插入算法每层外循环都迭代 内层循环寻找插入的位置

这里的三种排序算法是效率最低的排序算法 如果要排列的列表中有几百个元素那么不应该使用这些算方法 它们并不实用 但确实更高效算法的基础

你可能感兴趣的:(基础算法-选择排序、冒泡排序、插入排序)