统计了几种排序算法的比较和交换次数,以普通冒泡排序比较次数为100,做了一下数据处理,结果如下:
说明:
1.行中第一个是比较次数,第二个是交换次数。
2.第一行是全部随机,第二行是前70%有序,后30%无序。
3.数据个数是1000个。
1.普通冒泡。
100 50
100 28
2.带标记的冒泡。
100 50
99 28
3.鸡尾酒排序。
67 50
48 28
4.奇偶排序
98 50
97 28
5.梳子排序
5 1
5 1
6.地精排序。
101 50
57 28
7.快速排序。
2 1
2 1
8.选择排序。
100 0
100 0
9.插入排序
51 25
29 14
10.shell排序 (gap= n/2^i)
3 1
3 1
11.shell排序 (gap= 3*gap+1)
3 1
3 1
结论:
1.最快的当然是快速排序。
2.选择排序交换较少。还是有交换的,那个0是因为次数太少,四舍五入得出的。
3.最简单的插入排序也比冒泡排序好。
4.2,3,4,6,都是冒泡排序衍生的,比较次数不同,但交换次数是一样的。
5.shell排序的gap选择除2跟其他比较,在排序数据少时,差别不大。
相关文章
- 【排序算法】归并排序与快速排序:深入解析与比较
- 排序算法-插入排序-初始状态: 将数组分为已排序部分和未排序部分。初始时,已排序部分只包含第一个元素,而未排序部分包含其余的元素。逐步构建有序序列: 从未排序部分取出第一个元素,将其插入到已排序部分的正确位置,使得已排序部分仍然保持有序。比较并移动: 将取出的元素与已排序部分的元素逐一比较,找到其正确的插入位置。为了插入,可能需要将比它大的元素依次向右移动,为新元素腾出插入的位置。重复步骤 2-3: 重复以上步骤,每次取出未排序部分的一个元素,插入到已排序部分的正确位置。这样,已排序部分逐渐增加,未排序部分逐渐减小。直到排序完成: 重复上述过程,直到未排序部分为空,整个数组就被排序完成了。 插入排序代码
- ArcEngine数据删除几种方法和性能比较
- 比较常见的几种排序算法
- linux下进程间通信IPC几种方式性能比较
- 几种Boost算法的比较(Discrete AdaBoost, Real AdaBoost, LogitBoost, Gentle Adaboost)
- 排序算法(冒泡,插入),希尔排序(插入升级),希尔排序和插入排序时间比较!
- 排序算法的比较
- PHP的几种排序算法的比较
- Executors几种常用的线程池性能比较