欢迎来到天天文库
浏览记录
ID:49983191
大小:871.01 KB
页数:38页
时间:2020-03-06
《Chap8_算法与数据结构—C语言描述(第2版)张乃孝编课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、第八章排序排序定义——将一个数据元素(或记录)的任意序列,重新排列成一个按关键字有序的序列叫排序。排序分类按待排序记录所在位置内排序:待排序记录存放在内存外排序:排序过程中需对外存进行访问的排序按排序依据原则插入排序:直接插入排序、二分法插入排序、希尔排序选择排序:直接选择排序、堆排序交换排序:冒泡排序、快速排序归并排序:2-路归并排序分配排序:基数排序8.1基本概念排序基本操作比较两个关键字大小将记录从一个位置移动到另一个位置稳定排序与非稳定排序评价排序算法代价的标准执行算法所需的时间;比较次数、移动次数执行算法
2、所需要的附加空间;算法本身的复杂程度在待排序的文件中,如果存在多个排序码相同的记录,经过排序后,相同排序码记录的相对次序如果保持不变,则称这种排序方法是稳定的,否则是不稳定的。8.2插入排序直接插入排序排序过程:整个排序过程为n-1趟插入,即先将序列中第1个记录看成是一个有序子序列,然后从第2个记录开始,逐个进行插入,直至整个序列有序算法描述voidinsertSort(SortObject*pvector)例4938659776132749'i=138(3849)659776132749'i=265(384965
3、)9776132749'i=397(38496597)76132749'i=476(3849657697)132749'i=513(133849657697)2749'()i=6(133849657697)2749'27jjjjjj97)7665493827(13273849657697)排序结果:i=749'(13384949'657697)27算法评价时间复杂度若待排序记录按关键字从小到大排列(正序)关键字比较次数:Cmin=n-1≈n记录移动次数:Mmin=n-1≈n若待排序记录按关键字从大到小排列(逆序)关
4、键字比较次数:Cmin=n(n-1)/2记录移动次数:Mmin=n²/2若待排序记录是随机的,取平均值关键字比较次数:记录移动次数:T(n)=O(n²)空间复杂度:S(n)=O(1)二分法插入排序排序过程:用折半查找方法确定插入位置例i=1(30)1370853942620i=213(1330)70853942620i=76(6133039427085)20…...i=820(6133039427085)20sjmi=820(6133039427085)20sjmi=820(6133039427085)20sjmi
5、=820(6133039427085)20sji=820(613203039427085)算法描述程序实现算法评价时间复杂度:T(n)=O(n²)空间复杂度:S(n)=O(1)算法中增加了一个辅助空间temp希尔排序(缩小增量法)排序过程:先取一个正整数d16、8659776132748554一趟排序:1327485544938659776二趟排序:1344838274955659776取d1=5一趟分组:4938659776132748554取d2=3二趟分组:1327485544938659776算法描述例4938659776132748554#defineT3intd[]={5,3,1};ji49133827一趟排序:1327485544938659776jiji274jiji55ji38jijiji二趟排序:1344838274955659776jiji6548j7、i9755ji764希尔排序特点子序列的构成不是简单的“逐段分割”,而是将相隔某个增量的记录组成一个子序列希尔排序可提高排序速度,因为分组后n值减小,n²更小,而T(n)=O(n²),所以T(n)从总体上看是减小了关键字较小的记录跳跃式前移,在进行最后一趟增量为1的插入排序时,序列已基本有序增量序列取法无除1以外的公因子最后一个增量值必须为18.3选择排序简单选择排序排序过程首先通过n-1次关键字比较,从n个记录中找出关键字最小的记录,将它与第一个记录交换再通过n-2次比较,从剩余的n-1个记录中找出关键字次小的记8、录,将它与第二个记录交换重复上述操作,共进行n-1趟排序后,排序结束例初始:[49386597761327]kjjjjjjkki=11349一趟:13[386597764927]i=2kkjjjjj2738二趟:1327[6597764938]三趟:132738[97764965]四趟:13273849[769765]五趟:1327384965[9776]六
6、8659776132748554一趟排序:1327485544938659776二趟排序:1344838274955659776取d1=5一趟分组:4938659776132748554取d2=3二趟分组:1327485544938659776算法描述例4938659776132748554#defineT3intd[]={5,3,1};ji49133827一趟排序:1327485544938659776jiji274jiji55ji38jijiji二趟排序:1344838274955659776jiji6548j
7、i9755ji764希尔排序特点子序列的构成不是简单的“逐段分割”,而是将相隔某个增量的记录组成一个子序列希尔排序可提高排序速度,因为分组后n值减小,n²更小,而T(n)=O(n²),所以T(n)从总体上看是减小了关键字较小的记录跳跃式前移,在进行最后一趟增量为1的插入排序时,序列已基本有序增量序列取法无除1以外的公因子最后一个增量值必须为18.3选择排序简单选择排序排序过程首先通过n-1次关键字比较,从n个记录中找出关键字最小的记录,将它与第一个记录交换再通过n-2次比较,从剩余的n-1个记录中找出关键字次小的记
8、录,将它与第二个记录交换重复上述操作,共进行n-1趟排序后,排序结束例初始:[49386597761327]kjjjjjjkki=11349一趟:13[386597764927]i=2kkjjjjj2738二趟:1327[6597764938]三趟:132738[97764965]四趟:13273849[769765]五趟:1327384965[9776]六
此文档下载收益归作者所有