冒泡排序和插入排序 是不是实际上区别不大?

2017-11-24 11:30:50 +08:00
 lhx2008
我能想到的两个区别:
1. 插入排序是从靠近 已排序区 的一端开始排,冒泡排序是从远离 已排序区 的一端开始排
2. 待排序的元素 到达指定的位置后,插入排序 不再继续检查,冒泡排序 仍然继续检查到尾端

如果:
冒泡排序如果手动指定一个 flag 变量,使到达位置后不再检查,
那么,是不是可以说两个排序除了第一个微小的区别以外,基本没有区别?
4216 次点击
所在节点    问与答
7 条回复
neosfung
2017-11-24 11:47:44 +08:00
是的
冒泡其实就是插入排序的一种变种,实现方式不一样而已
coderluan
2017-11-24 12:01:56 +08:00
冒泡排序和插入排序的算法复杂度是一样的,所以在我眼中,他们根本没区别......
czheo
2017-11-24 12:22:40 +08:00
差别挺大的啊。
最大区别:冒泡时在 [未排序的部分] 里面找最大(或小),放到一端。插入是往 [已排序好] 的部分里面插入当前数。
不变条件(invarient)不同:冒泡是,最大的数会先被排序好到一端。插入是,当前点的一侧是已排序的( sorted ),这些数并不一定是最大的。
循环终止条件不同:冒泡必须遍历未排序的所有数字才能找到最大,插入找到合适位置就可以停。
czheo
2017-11-24 12:32:19 +08:00
czheo
2017-11-24 12:44:49 +08:00
liuminghao233
2017-11-24 12:56:23 +08:00
升级版希尔排序可能会好一些
blackjar
2017-11-24 15:10:02 +08:00
冒泡跟选择差别不大才对吧 插入就是另外一种思路了
冒泡跟选择都会把待排序列中最大或者最小值每次排出 插入则不是
另外冒泡在每个单元操作中都要交换一次 而选择通常只是对 flag 的位置赋值一次(所以冒泡通常会更慢)
当然这三种都是 O(n2)的排序 这个是一样的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/409161

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX