文章目录
排序
考纲内容
(一)排序的基本概念
(二)插入排序
直接插入排序;折半插入排序;希尔排序(shell sort)
(三)交换排序
冒泡排序(bubble sort);快速排序
(四)选择排序
简单选择排序;堆排序
(五)二路归并排序(merge sort)
(六)基数排序
(七)外部排序
(八)排序算法的分析和应用
知识框架
复习提示
堆排序、快速排序和归并排序是本章的重难点。读者应深入掌握各种排序算法的思想、排序过程(能动手模拟)和特征(初态的影响、复杂度、稳定性、适用性等),通常以选择题的形式考查不同算法之间的对比。此外,对于一些常用排序算法的关键代码,要达到熟练编写的程度:看到某特定序列,读者应具有选择最优排序算法(根据排序算法特征)的能力。
1.排序的基本概念
1.1排序的定义
排序,就是重新排列表中的元素,使表中的元素满足按关键字有序的过程。
为了查找方便,通常希望计算机中的表是按关键字有序的。排序的确切定义如下:
输入:n个记录 R₁ ,R₂,…,Rₙ,对应的关键字为k₁, k₂,…,kₙ
输出:输入序列的一个重排R₁' ,R₂',…,Rₙ',使得 k₁'≤k'₂≤…≤kₙ',(其中“≤”可以换成其他的比较大小的符号)。
算法的稳定性。若待排序表中有两个元素Rᵢ 和Rⱼ ,其对应的关键字相同,即 keyᵢ =keyⱼ ,且在排序前 Rᵢ 在Rⱼ 的前面,若使用某一排序算法排序后,Rᵢ仍然在Rⱼ 的前面,则称这个排序算法是稳定的,否则称这个排序算法是不稳定的。
需要注意的是,算法是否具有稳定性并不能衡量一个算法的优劣,它主要是对算法的性质进行描述。
若待排序表中的关键字不允许重复,排序结果是唯一的,则对于排序算法的选择,稳定与否无关紧要。
注意:对于不稳定的排序算法,只需举出一组关键字的实例,说明它的不稳定性即可
在排序过程中,根据数据元素是否完全存放在内存中,可将排序算法分为两类:
- ①内部排序,是指在排序期间元素全部存放在内存中的排序;
- ②外部排序,是指在排序期间元素无法全部同时存放在内存中,必须在排序的过程中根据要求不断地在内、外存之间移动的排序。
一般情况下,内部排序算法在执行过程中都要进行两种操作:比较和移