排序算法总结

前言

分析各种不同情况在应用排序算法中的重要因素,观察不同类型的输入文件,比较各种排序算法的其他方式以及学习他们各自的特性。

在许多需要排序的应用程序中,首先我们常常只使用一次或者几次排序程序。如果一个基本排序算法不比其他数据处理,如数据读入和读出要慢, 就没有必要寻找一个更快的方法。如果需要排序的元素不是很多,我们宁愿实现并运行一个简单的方法,而不是将精力耗费在系统排序的接口或实现以及调试的方法上。其次,基本方法通常适合小型文件,复杂的算法会导致很高的开销,甚至比简单的方法更慢。


1. 选择排序

选择排序使用大概N^2/2次比较操作和N次交换(移动)操作。(结果与输入数据的顺序无关)

选择排序的缺点,它的运行时间对文件中已排序的部分依赖较少。

虽然选择排序比较简单但是执行时间上具有强迫性,但它对某一类重要文件的排序效率要比其他方法要好:对于元素比较大,关键字又比较小的文件,应该选择该方法,而其他算法的移动数据的步数都比选择排序要多。(其他排序算法移动数据的步数都比选择排序要多) 当然对于这种文件还可以考虑索引或指针排序。


2.插入排序

程序改进:观察哨的使用---通过使用观察哨,可以减少对于内层循环是否到达顶点的判断(并不是每次都要判断的),但是观察哨有时是难以使用的,一方面是由于最值的难以定义,另一方面调用程序没有空间包含这个额外的关键字。故可以在插入排序开始之前,先进行一遍选择排序将待排元素的最值找出并当作观察哨。

在平均情况下,插入排序使用大概N^2/4次比较操作和N^2/4次交换(移动)操作。

插入排序的运行时间和输入文件的原始顺序密切相关。


3.冒泡排序

程序该进: 增加标志位测试文件时候已序,提前跳出循环。(提高的效率赶不上中断内部循环的插入排序)

在平均情况和最坏情况下,冒泡排序的执行大约N^2/2次比较操作和N^2/2次交换(移动)操作。


文件中一对顺序不对的元素称为一个逆序。在插入排序中,总逆序数就是元素要插入文件时所要向前移动的步数。对于逆序为线性规模的序列,插入排序和冒泡排序有着线性的效率


总结:以上三种基本的排序方法,对基本有序的文件进行排序时才能体现插入排序和冒泡排序的效率。

            我们需要分析比较和交换操作的相对开销,而该特性与元素和关键字的大小有关。


4.希尔排序

希尔排序法是插入排序的拓展。希尔排序关键是要使用一个性能较好的步长序列。

如果需要快速解决问题,而且不涉及系统排序,使用希尔排序法是个不错的选择。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值