排序应用

排序如此有用的一个主要原因是,在一个有序的数组中查找一个元素要比在一个无序的数组中查找简单得多。人们用了一个多世纪发现在一本按姓氏排序的电话黄页中查找某个人的电话号码最容易。现在,数字音乐作家们将歌曲文件按照作家名或是歌曲名排序,搜索引擎按照搜素结果的重要性的高低显示结果,电子表格按照某一列的排序结果显示所有栏,矩阵处理工具将一个对称矩阵的真实特征值按照降序排列,等等。只要队列是有序的,很多其他任务也更容易完成,比如在本书最后的有序索引中查找某项,或是从一列长长的邮件列表或者投票人列表或者网站列表中删去重复项,或是在统计学计算中剔除异常值、查找中位数或者计算比例。

在许多看似无关的领域中,排序其实仍然是个重要的子问题。 数据压缩、计算机图形学、计算生物学、供应链管理、组合优化、社会选择和投票等,不一而足。我们在本章中学习的算法也在开发本书其他章节的强大算法的过程中起到了关键作用。

通用排序算法是最重要的,因此我们首先会考虑些在构建适用于 多种情况的排序算法时需要注意的实际问题。虽然部分话题只适用于Java,但每个问题都仍然是所有系统需要解决的。

我们的主要目的是为了说明,尽管我们所学习的各种算法的思想相对简单,但它们的适用领域仍然广泛经过验证的各种排序算法的应用列表很长,我们在这里只会涉及其中的一小部分,一些是科学领域的。一 些是算法领域的。 还有一些是商业领域的。 在练习中你们还能找到更多例子。本书的网站上还有更多。

目录

将各种数据排序

交易事务

指针排序

不可变的键

廉价的交换

多种排序方法

多健数组

使用比较器实现优先多列

稳定性

从另一个键上排序的稳定性

我应该使用哪种排序算法

从另一个键上排序的稳定性

将原始类型数据排序

java系统库的排序算法

问题的规约

找出重复元素

排名

优先队列

中位数与顺序统计

用切分找出中位数

排序应用一览

商业计算

信息搜索

运筹学

事件驱动模拟

数值计算

组合搜索

参考资料

《算法(第4版)》第二章排序2.3快速排序

本书网站