在上一篇文章中,我介绍了冒泡的排序。您还记得冒泡排序时间的时间复杂性吗?让我们回顾一下
气泡排序是一种稳定的排序。相等的元素不会破坏原始顺序。由于排序算法的每一轮都遍历所有元素,并遍历总(数字1)回合,因此平均时间复杂度为O(n 2)。
因此,除了冒泡排序外,还有两种类型的排序算法。时间复杂性也是O(n 2)。其中一个是选择排序,另一个是插入排序。
选择选项是一个简单而直观的排序算法。ITS的工作原理:首先在未指定的序列中找到最小(大)元素,将其存储到排序序列的起始位置,然后从其余的Unspeed元素继续进行,然后继续前进。。
让我们来看看一个例子:如果一组儿童排队为核酸排队,则需要从低到高的高度排列。您将如何为孩子排队?
1号儿童高于2号,因此将第1号和2号更改为位置!
1号儿童,您比第3号高,因此更改1号和3号!
1号儿童,您高于4号,因此将第1号和第4号更改为位置!
第1号,您高于第5号,因此将第1号和5号更改为一个位置!
这样,同学总共交换了4次,只完成了起泡排序的第一轮操作。还有更多的人吗?实际上,有一种更简单的方法可以适应实际生活过程
5号儿童是最短的,因此将第5号和1号更改为职位!
第四名儿童是最短的学生,因此将第4号和2号更改为职位!
2号儿童是最短的学生,因此将第3号和2号更改为职位!
它的排名很好,无需更改!
这样,只有只需切换即可完成团队的排序。您可以更快地做核酸。老师和同学还可以花更多的时间阅读我写的文章?笑。
这样,直接选择最小元素的想法是选择排序。这种排序的最大优势是节省多余的元素交换。
选择实现排序代码的代码
算法分析:外部循环仅运行n -1迭代。但是,当i = 0时,内部循环操作变越短,内部循环n -1“比较”操作。当i = 1时,内部循环n- 2“比较”操作。内部周期是“比较”。因此,总“比较”如下:(n -1) + ... + ... + 2 + 1 = n(n -1) / 2
由于选择排序具有较少交换的优点,因此为什么由于其不稳定而不能替换冒泡排序。
插入排序算法描述是一种简单而直观的排序算法。,您需要逐渐向后移动排序元素,以提供最新元素的空间。
就流行点而言,这意味着将有序的区域保持并插入适当的位置,直到所有元素都以有序的方式为止。LET的使用样本示范
给出无订单的数组:[3,5,2,6,4,8]
将阵列中的第一个元素3作为有序区域。目前,元素3是有序区域中唯一的元素
第一轮:让元素5和订购区从背面顺序比较元素。目前,有序区域中只有3个要素。5> 3,因此在有序区域中以3为3的顺序。目前,有序区域有2个元素
第二轮:让元素2中的元素和顺序区域中的元素进行比较。2<5 把元素2和元素5进行交换, 2<3把2和3进行交换, 此时有序区中有3个元素
第三轮 :6>5,因此将元素6放在有序区域后5。目前,有序区域有4个元素
第四轮:4<6把元素4和元素6进行交换,4<5把元素3和元素5进行交换,此时有序区中有5个元素
第五轮 : 8>6.将元素8添加到有序区域。目前,订单区域中有6个要素。
您是否注意到在演示的插入过程中,当我们将每个新元素插入有序区域时,我们需要在元素之间交换两个或两个交换。
那么我们如何优化不必要的交换?我们将暂时存储需要插入的元素,然后复制大于订单中要插入的值的元素,让我们返回第四轮操作
步骤1,单独的空间临时存款元素4
第2步,与以前的元素相比,因为4<6,把6复制给它下一个位置
步骤3, 和前一个元素比较, 由于4<5, 把5复制给它下一个位置
步骤4, 和前一个元素比较, 由于4>3.将临时元素4分配给元素3下一个位置
插入订单代码实现
在下一篇文章中:十大分类文章,Sanhel分类和合并