选择排序和冒泡排序就该踢出教材?
至于这两个该踢出教材之说,姑且认为只是为了吸引眼球... 我只知道不少工作了几年的人给他讲那些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. 冒泡也许的确是鸡肋算法,包括直接变体鸡尾酒算法,至少我还没碰上过什么加上冒泡算法比较好的情况。不过,除了鸡尾酒,冒泡排序还有一种至关重要的变体——堆排序。
总之,不能太小看简单的算法。