
严蔚敏数据结构排序.ppt
60页第九章 内部排序• 分类:分类:•内部排序:全部记录都可以同时调入内存进行的排序内部排序:全部记录都可以同时调入内存进行的排序 •外部排序:文件中的记录太大,无法全部将其同时调入内存进行的排外部排序:文件中的记录太大,无法全部将其同时调入内存进行的排序• 定义:设有记录序列:定义:设有记录序列:{ R1、、R2 ……….. Rn } 其相应的关键字其相应的关键字序列为:序列为: { K1、、K2 ……….. Kn }; 若存在一种确定的关系:若存在一种确定的关系: Kx <= Ky <= … <= Kz则将记录序列则将记录序列 { R1、、R2 ……….. Rn } 排成按排成按该关键字有序的序列:该关键字有序的序列: { Rx、、Ry ……….. Rz } 的的操作,称之为操作,称之为排序 关系是任意的,如通常经常使用的小于、大于等关系关系是任意的,如通常经常使用的小于、大于等关系• 稳定与不稳定:若记录序列中的任意两个记录稳定与不稳定:若记录序列中的任意两个记录 Rx、、Ry 的关键字的关键字 Kx = Ky ;;如果在排序之前和排序之后,它们的相对位置保持不变,如果在排序之前和排序之后,它们的相对位置保持不变,则这种排序方法是稳定的,否则是不稳定的。
则这种排序方法是稳定的,否则是不稳定的§9.1 插入排序«直接插入排序v排序过程:整个排序过程为n-1趟插入,即先将序列中第1个记录看成是一个有序子序列,然后从第2个记录开始,逐个进行插入,直至整个序列有序v算法描述例49 38 65 97 76 13 27i=2 38 (38 49) 65 97 76 13 27i=3 65 (38 49 65) 97 76 13 27i=4 97 (38 49 65 97) 76 13 27i=5 76 (38 49 65 76 97) 13 27i=6 13 (13 38 49 65 76 97) 27i=1 ( )i=7 (13 38 49 65 76 97) 2727jjjjjj977665493827 (13 27 38 49 65 76 97)排序结果: 0 1 2 3 4 5 6 7 v算法评价l时间复杂度u若待排序记录按关键字从小到大排列(正序)Y关键字比较次数:Y记录移动次数: 0 1 2 3 4 5 6 7 13 27 38 49 65 76 97u若待排序记录按关键字从大到小排列(逆序)Y关键字比较次数:Y记录移动次数: 0 1 2 3 4 5 6 7 97 76 65 49 38 27 13u若待排序记录是随机的,取平均值Y关键字比较次数:Y记录移动次数:T(n)=O(n²)l空间杂度:S(n)=O(1)«折半插入排序v排序过程:用折半查找方法确定插入位置的排序叫~例i=1 (30) 13 70 85 39 42 6 20i=2 13 (13 30) 70 85 39 42 6 20i=7 6 (6 13 30 39 42 70 85 ) 20…...i=8 20 (6 13 30 39 42 70 85 ) 20sjmi=8 20 (6 13 30 39 42 70 85 ) 20sjmi=8 20 (6 13 30 39 42 70 85 ) 20sjmi=8 20 (6 13 30 39 42 70 85 ) 20sji=8 20 (6 13 20 30 39 42 70 85 )v算法描述v算法评价l时间复杂度:T(n)=O(n²)l空间复杂度:S(n)=O(1)«希尔排序(缩小增量法)v排序过程:先取一个正整数d1
已排序的顺序表合并成一个有序表顺序比较两者的相应元素,小者移入另一表中,反顺序比较两者的相应元素,小者移入另一表中,反复如此,直至其中任一表都移入另一表为止复如此,直至其中任一表都移入另一表为止0 1 2 3 44913659776780AB0 1 2 3 4 5 6 7 Cijk0 1 2 3 44913659776780AB0 1 2 3 4 5 6 7 Cijk70 1 2 3 44913659776780AB0 1 2 3 4 5 6 7 Cijk70 1 2 3 44913659776780AB0 1 2 3 4 5 6 7 Cijk7130 1 2 3 44913659776780AB0 1 2 3 4 5 6 7 Cijk713490 1 2 3 44913659776780AB0 1 2 3 4 5 6 7 Cijk713490 1 2 3 44913659776780AB0 1 2 3 4 5 6 7 Cijk71349650 1 2 3 44913659776780AB0 1 2 3 4 5 6 7 Cijk71349650 1 2 3 44913659776780AB0 1 2 3 4 5 6 7 Cijk7134965760 1 2 3 44913659776780AB0 1 2 3 4 5 6 7 Cijk7134965760 1 2 3 44913659776780AB0 1 2 3 4 5 6 7 Cijk713496576800 1 2 3 44913659776780AB0 1 2 3 4 5 6 7 Cijk713496576800 1 2 3 44913659776780AB0 1 2 3 4 5 6 7 Cijk71349657680至此至此 B 表的元素都已表的元素都已移入移入 C 表,只需将表,只需将 A 表的剩余部分移入表的剩余部分移入 C 表即可。
表即可0 1 2 3 44913659776780AB0 1 2 3 4 5 6 7 Cijk71349657680至此至此 B 表的元素都已表的元素都已移入移入 C 表,只需将表,只需将 A 表的剩余部分移入表的剩余部分移入 C 表即可97例初始关键字: [49] [38] [65] [97] [76] [13] [27]一趟归并后: [38 49] [65 97] [13 76] [27]二趟归并后: [38 49 65 97] [13 27 76]三趟归并后: [13 27 38 49 65 76 97]l算法描述v算法评价l时间复杂度:T(n)=O(nlog2n)l空间复杂度:S(n)=O(n)§9.5 基数排序«多关键字排序v定义:例 对52张扑克牌按以下次序排序:2<3<……<A<2<3<……<A<2<3<……<A<2<3<……<A两个关键字:花色( <<< ) 面值(2<3<……
