第8章 排序
8.1 概述:
1. 排序的定义:将一组杂乱无章的数据按一定规律顺次排列起来。
2. 排序的目的:方便查找。
3. 内外排序区分:若待排序记录都在内存中,称为内部排序。若待排序记录一部分在内存,一部分在外存,则称为外部排序。(外部排序时,要将数据分批调入内存来排序,中间结果还要及时放入外存,显然外部排序要复杂得多)
4 排序算法好坏的衡量标准:时间效率/空间效率/稳定性
8.2 插入排序
基本思想:
每步将一个待排序的对象,按其关键码大小,插入到前面已经排好序的一组对象的适当位置上,直到对象全部插入为止。(即一边插入一边排序,保证子序列中随时都是排好序的)
插入排序分类:
A: 直接插入排序(基于顺序查找)
排序过程:整个排序过程为n-1趟插入,即先将序列中第1个记录看成是一个有序子序列,然后从第2个记录开始,逐个进行插入,直至整个序列有序;
时间O(n)=n^2
空间O(n)=1
稳定性:稳定的排序;
B:折半插入排序(基于折半查找)
减少了比较的次数,但并未减少移动的次数,平均性能比直接插入排序好;
时间O(n)=n^2
空间O(n)=1
稳定性:稳定的排序;
C: 希尔排序 (基于逐趟缩小增量)
先将整个待排记录序列分割成若干子序列,分别进行直接插入排序,待整个序列中的记录“基本有序”时,再对全体记录进行一次直接插入排序;
时间O(n^(1.3—2)) 想要弄清关键词比较次数和记录移动次数与增量选择之间的关系,并给出完整的数学分析,今仍然是数学难题。
空间:O(n)=1
稳定性:不稳定的排序
8.3 交换排序
基本思想:
两两比较,如果发生逆序则交换,直到所有记录都排好序为止;
A: 冒泡排序
基本思想:每趟不断将记录两两比较,并按“前小后大”规则交换
时间O(n)=n^2
空间O(n)=1
稳定性:稳定的排序
B: 快速排序
基本思想:
任意一个元素(如第一个)为中心,所有比它小的元素都前放,比它大的元素都后放,形成两个左右子表,对各个子表重新选择中心元素并依此规则调整,直到子表的元素只有一个元素;
时间O(n)=nlogn
空间O(n)=logn
稳定性:不稳定的排序
8.4 选择排序
A:直接选择排序:
基本思想:
每一趟在后面n-i-1个中宣传关键码最小的对象,作为有序序列的第i个记录;
时间O(n)=n^2
空间O(n)=1
稳定性:不稳定的排序
一边复习,一边记录,还有部分内容,未完待续,慢慢补上!!!