首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

选择排序和冒泡排序就该踢出教材?该如何处理

2012-02-16 
选择排序和冒泡排序就该踢出教材?至于这两个该踢出教材之说,姑且认为只是为了吸引眼球... 我只知道不少工

选择排序和冒泡排序就该踢出教材?
至于这两个该踢出教材之说,姑且认为只是为了吸引眼球... 我只知道不少工作了几年的人给他讲那些O(N * logN)的算法都弄得我想跳楼,学校老师也不容易。

说说这两个算法的地位。

1. 选择排序是无法取代的。目前我不知道也没人跟我说过有什么排序算法逻辑比选择排序更简单。逻辑简单意味着代码量少,代码量少意味着单次循环执行速度就快。

logN有个特点:log512 = 9, log256 = 8, ..., log16 = 4, log8 = 3, log4 = 2, log2 = 1。也就是N越小logN和N越接近。8开始logN和N的关系基本上就是1:2了。而这个时候,对于很多比较压力小的排序,选择排序一次循环花的时间已经不到O(N * logN)算法的一半了。

所以其实真正使用快速排序或者合并排序的时候,往往会处理成当前的子序列短到一定程度的时候就切换成选择排序。

2. 冒泡也许的确是鸡肋算法,包括直接变体鸡尾酒算法,至少我还没碰上过什么加上冒泡算法比较好的情况。不过,除了鸡尾酒,冒泡排序还有一种至关重要的变体——堆排序。

总之,不能太小看简单的算法。

[解决办法]
潜力贴。我这样做是不是太水了?啊……我知道错了……神啊……楼主啊……原谅我吧。
[解决办法]
O(n*n)算法和O(n*logn)算法都值得学习,O(n*n)算法通常是O(n*logn)算法的基础,易懂,代码简短,但并不意味着O(n*logn)算法就是高深的和复杂的,比如梳子排序算法也是O(n*logn)的,但是代码量不多于O(n*n)的选择排序和冒泡排序,而且也很容易理解,只不过是不稳定的排序。

http://blog.csdn.net/yui/archive/2010/10/21/5957264.aspx
[解决办法]
头一次看到“鸡尾酒排序”,google一下看了看实现原理, 发现很适合用来排序基本有序的数据。刚好前一段时间还遇到过这种情况,不过数据量也不大。
[解决办法]
6楼说得很好,顶一下

不过并不是gap为k,就是以k为底的,这个我也不懂,但是梳子排序中,1.3是一个实验值,gap取1.3通常比取2快
[解决办法]
我比较喜欢选择排序。主要是通用性强,逻辑简单,不容易出错。

如果有特别的速度瓶颈,我才会考虑去寻找更好的排序算法。
[解决办法]
我写程序的时候,感觉在设计上越接近生活逻辑--而不是计算机逻辑,则代码维护起来就越容易。

对象就是一个最好的例子。一个对象,对应了生活中一个具体的事物,大家操纵起来就很舒服。
[解决办法]
一个帖子不能说明全部问题
两位作者,都说得有道理,而且不相冲突

原先一贴,让大家更多的对比与认识。
此贴让我们明白"韩寒虽然牛x,但不能取笑老一辈"






[解决办法]
算法复杂度不能完全决定程序执行的效率,还有许多细节要注意,包括Cache miss ,TLB miss等等技术问题。
总之,既要考虑计算速度,更要考虑存储层次。

热点排行