排序与我们日常生活中息息相关,比如,我们要从电话簿中找到某个联系人首先会按照姓氏排序、买火车票会按照出发时间、买东西会按照销量排序、查找文件会按照最近修改时间排序等等。在程序设计中,排序也是最基本的算法,在一般的数据处理或分析中,首先就需要对数据进行排序。
比如期末考成绩排序按照总分从高到低的顺序进行排序。这是就是让学生成绩按照关键字总分从高到低排序。如果期末考成绩按照学号排序,那就是按照关键字学号排序。
当所有待排序记录的关键字均不相同时,排序结果是惟一的,否则排序结果不唯一。
在待排序的文件中,若存在多个关键字相同的记录,经过排序后这些具有相同关键字的记录之间的相对次序保持不变,该排序方法是稳定的;若具有相同关键字的记录之间的相对次序发生变化,则称这种排序方法是不稳定的。
排序方法的分类
1.按是否涉及数据的内、外存交换
2.按策略划分内部排序方法,可以分为五类:插入排序、选择排序、交换排序、归并排序和分配排序。
1.排序算法的基本操作
(1) 比较两个关键字的大小;
(2) 改变指向记录的指针或移动记录本身。
2.待排文件的常用存储方式
(1) 以顺序表作为存储结构
排序过程:直接对记录进行物理移动。
(2) 以链表作为存储结构
排序过程:无须移动记录,仅需修改指针。
(3) 用顺序的方式存储待排序的记录,但同时建立一个辅助表(如包括关键字和指向记录位置的指针组成的索引表)
排序过程:只需对辅助表的表目进行物理重排。适用于难于在链表上实现,仍需避免排序过程中移动记录的排序方法。
3.排序算法性能评价
评价排序算法好坏的标准主要有两条:
算法的时间复杂度与空间复杂度
算法本身的复杂程度
了解排序的基本概念,下一篇开始依次讲讲几个常见的排序算法。讨论不同算法的效率高低以及讲讲不同算法的使用场景。