读书笔记 -- 算法导论(第二部分 排序和顺序统计学)
输入数据的结构 在实际中,待排序的数很少是孤立的值,它们通常是一个称为记录的数据集的一部分。每个记录有一个关键字key,它是待排序的值。记录的其他数据称为卫星数据,即它们通常以key为中心传送。在一个排序的算法中,当交换关键字时,卫星数据也必须交换。如果记录都很大,我们可以交换一组指向各个记录的指针而不是记录本身,以求将数据移动量减少到最小。 在一定意义上,正式这些实现细节才使得一个完整的程序不同于算法。不管我们要排序的是单个的数值还是包含数据的大型记录,就排序的方法来说它们都是一样的。因为,为了集中考虑排序问题,我们一般都假设输入仅由数值构成。将对数字的排序算法转换为对记录排序的程序是很直接的。当然,在具体的工程条件下,实际的程序设计可能还会遇到其他难以捉摸的挑战。 为什么要研究排序? 许多计算机科学家认为,排序算法是算法学习中最基本的问题。原因有以下几个: 有时候应用程序本身就需要对信息进行排序。e.g. 准本客户账目,银行的支票号码 许多算法通常把排序作为关键子程序。 现在已经有很多的排序算法,它们采用各种技术。事实上,在算法设计中使用的很多重要技术在已经发展很多年的排序算法中早已用到了。所以,排序是一个具有历史意义的问题。 在实现排序算法时很多工程问题即浮出水面。对于某个特定的应用场景来说,最快的排序算法可能与许多因素有关:譬如关键字值和卫星数据的先验知识