武汉软件工程职业学院数据结构讲义第21讲_排序

上传人:l**** 文档编号:133804958 上传时间:2020-05-30 格式:DOC 页数:5 大小:50.50KB
返回 下载 相关 举报
武汉软件工程职业学院数据结构讲义第21讲_排序_第1页
第1页 / 共5页
武汉软件工程职业学院数据结构讲义第21讲_排序_第2页
第2页 / 共5页
武汉软件工程职业学院数据结构讲义第21讲_排序_第3页
第3页 / 共5页
武汉软件工程职业学院数据结构讲义第21讲_排序_第4页
第4页 / 共5页
武汉软件工程职业学院数据结构讲义第21讲_排序_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《武汉软件工程职业学院数据结构讲义第21讲_排序》由会员分享,可在线阅读,更多相关《武汉软件工程职业学院数据结构讲义第21讲_排序(5页珍藏版)》请在金锄头文库上搜索。

1、第二十一讲 排序1掌握排序的基本概念。2掌握部排序中的插入排序方法。 教学重点: 部排序中的插入排序方法 教学难点: 部排序中的插入排序方法 授课容6.1排序的基本概念排序(sorting)又称分类,是计算机程序设计中的一个重要操作,即把一批任意序列的数据元素(或记录),重新排列成一个按关键字有序的序列。通过排序可以提高数据表的直观性,并为以后查询提供方便,提高查找效率。排序的应用领域十分惯犯,因此在很多领域有广泛应用。簿、病历、情报、档案、图书馆和各种词典的目录表(或目录卡)等都离不开排序。为了进一步理解排序,在此给出一个比较确切的排序定义:假设含d个记录的序列为 R1 ,R2 ,Rd (6

2、.1.1)其相应的关键字序列为 K1 ,K2 ,Kd 需确定1,2,,d的一种排列p1,p2,pd,使其响应的关键字满足下列的非递减(或非递增)关系: Kp1Kp2Kpd (6.1.2)即使式(6.1.1)的序列成为一个按关键字有序的序列 Rp1 ,Rp2 , ,Rpd (6.1.3)这样一种操作成为排序。在待排序的记录中若关键字值是唯一的(即Ki是主关键字),则任何一组记录经排序后得到的结果是唯一的;在待排序的记录中若有两个或两个以上关键字值相同的记录,则排序的结果不唯一。在用某种方法排序之后,这些关键字相同的记录相对先后次序不变,即当Ki=Kj(1id,1jd,i)且ij,若在排序后的序列

3、中Ri仍领先于Rj,则称所用的排序方法是稳定的;反之,若可能使排序后的序列中Rj领先于Ri,则称所用的排序方法是不稳定的。排序的方法有多种,若按排序过程中所涉及的存储器不用,可奖排序方法分为两大类:一类是部排序,即将待排记录调入计算机的存中进行的排序过程,其排序方法包括插入排序、交换排序、选择排序、归并排序和基数排序等。另一类是外部排序,即待排序记录的数量很大,以致存不能依次容纳全部记录,在排序过程需对外存访问的排序过程。数据结构定义为:#define MAXSIZE 30typedef struct int key; dataType oth; RcdType; RcdType rMAXSI

4、ZE+1;62 部排序 621 插入排序 1直接插入排序 直接插入排序(straight insertion sort)是一种最简单的插入排序方法。它的基本操作是将一个记录插入到一个长度为n(假设)的有序表中,使之仍保持有序,从而得到一个新的长度为n+1的有序表。如同玩扑克牌的人抓牌一样,将抓到的牌插入到手重已排好的牌的一个适当位子上。 算法思路:设有彝族关键字K1,K2,Kn;认为Kl就是一个有序序列;让K2插入上述表长为1的有序序列中,使之成为一个表长为2的有序序列;让K3插入上述表长为2的有序序列中,使之成为一个表长为3的有序序列;依此类推,最后让Kn插入到表厂为n-1的有序序列中,得到

5、一个表长为n的有序序列。void InsertSort(RcdType r ,int n)for(i=2;i=n;i+)r0=ri;j=i-1;while(r0.keyrj.key) rj+1=rj;j-; rj+1=r0; 2,折半插入排序当用直接插入排序进行到某一趟比较时,对于ri.key来讲,前边i-1个记录已经按关键字排序。此时可不用直接插入排序的方法,而改用折半插入排序。算法思路:与直接插入排序相近,只是在进行比较时,ri.key首先与已排好序的中间记录进行比较,然后根据比较结果来确定ri.key继续与中间记录的前面记录比较,还是与中间记录的后面记录比较,找出应插入的位置,然后插入。

6、算法如下:void BinSort(RcdType r ,int n ) for (i=2;i=n;i+)r0=ri;low=1;high=i-1;while(low=high) mid=(low+high)/2; if(r0.key=low;j-) rj+1=rj;rlow=r0; 3.希尔排序希尔排序(Shell sort)也称“缩小增量排序”。它的做法不是每次一个元素挨一个元素的比较。而是先将整个待排序记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录看承是一组,然后在各组进行插入排序;接着取d2(d2=1),即所有记录成为一个组为止。希尔排序对增量序列的选择没有严格规定,一般选d1约为n/2,d2为d1/2,d3为d2/2,di=1。void ShellSort(RcdType r ,int n) d=n/2; while(d0) for (i=d+1;i=0&r0.keyrj.key) rj+d=rj;j=j-d; rj+d=r0; d=d/2;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 工作范文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号