数据结构讲义第章-排序PPT文件格式下载.ppt

上传人:b****1 文档编号:14680903 上传时间:2022-10-23 格式:PPT 页数:81 大小:609KB
下载 相关 举报
数据结构讲义第章-排序PPT文件格式下载.ppt_第1页
第1页 / 共81页
数据结构讲义第章-排序PPT文件格式下载.ppt_第2页
第2页 / 共81页
数据结构讲义第章-排序PPT文件格式下载.ppt_第3页
第3页 / 共81页
数据结构讲义第章-排序PPT文件格式下载.ppt_第4页
第4页 / 共81页
数据结构讲义第章-排序PPT文件格式下载.ppt_第5页
第5页 / 共81页
点击查看更多>>
下载资源
资源描述

数据结构讲义第章-排序PPT文件格式下载.ppt

《数据结构讲义第章-排序PPT文件格式下载.ppt》由会员分享,可在线阅读,更多相关《数据结构讲义第章-排序PPT文件格式下载.ppt(81页珍藏版)》请在冰豆网上搜索。

数据结构讲义第章-排序PPT文件格式下载.ppt

i)比较关键码大小ii)移动记录,(5)对于待排序的记录序列,有三种常见的存储表示方法。

向量结构,即将待排序的记录存放在一组地址连续的存储单元中。

链表结构。

记录向量与地址向量结合,即将待排序记录存放在一组地址连续的存储单元中,同时另设一个指示各个记录位置的地址向量。

10.1概述,1.排序的定义为简单起见,数据的存储结构采取向量的存储结构:

#definen20/记录数typedefintkeytype;

typedefstructkeytypekey;

datatypeother;

rectype;

rectypern+1;

10.1概述,1.排序的定义(6)排序算法的评价:

i)算法的执行时间ii)算法执行时所需的附加空间,10.2插入排序,基本原理:

每步将一个待排序的对象,按其关键字大小,插入到前面已经排好序的一组对象适当位置上,直到对象全部插入为止。

10.2插入排序,10.2.1直接插入排序1、直接插入排序的基本思想先假定第1个记录为有序序列,然后从第2条记录开始,依次将记录插入到前面已经有序的序列中,直至全部记录有序。

一般情况下,第i趟直接插入排序:

将ri插入到已经有序的序列r1.i-1中,使其变成有序序列r1.i。

整个排序进行n-1趟插入。

10.2插入排序,10.2.1直接插入排序2、示例:

初始:

4938659776132749,i=1:

3849659776132749,i=5:

1338496576972749,i=3:

3849659776132749,i=2:

3849659776132749,i=4:

3849657697132749,i=6:

1327384965769749,i=7:

1327384949657697,10.2插入排序,10.2.1直接插入排序3、算法:

voidInsertSort(rectypeR,intn)inti,j;

for(i=2;

in;

i+)R0Ri;

for(ji-1;

R0.keyRj.key;

j-)Rj+1Rj;

Rj+1R0,10.2插入排序,10.2.1直接插入排序4、算法分析:

空间效率:

只需要一个记录的辅助空间。

时间效率:

比较记录的次数为:

最小:

n-1次;

最大:

(n+2)(n-1)/2次移动记录的次数:

2(n-1)最大:

(n+4)(n-1)/2平均情况:

O(n2),10.2插入排序,10.2.2折半插入排序1、折半插入排序:

将直接插入排序的查找过程改用折半查找。

由此实现的排序称为二分法插入排序。

10.2插入排序,10.2.2折半插入排序2、示例:

(1)1327384965769749low=1mid=4high=7

(2)1327384965769749low=5mid=6high=7(3)1327384965769749low=5mid=5high=549high已找到插入位置low=5(4)1327384949657697,10.2插入排序,10.2.2折半插入排序3、算法:

voidBinInsertSort(rectyper,intn)for(i=2;

i=low;

-j)rj+1=rj;

/*记录后移*/rlow=x;

/*插入记录*/,10.2插入排序,10.2.2折半插入排序4、算法分析:

算法分析:

同直接插入排序时间效率:

比较次数确定:

nlog2inlog2ni=1移动记录次数:

平均移动次数为O(n2)时间复杂度为O(n2),10.2插入排序,10.2.3希尔排序(ShellsSort)1、希尔排序:

shell排序又称缩小增量排序(DiminishingIncrementSort)。

先将整个待排记录序列分割成若干个子序列分别进行直接插入排序,待整个序列中的记录“基本有序“时,再对全体记录进行一次直接插入排序,就可以完成整个的排序工作。

利用下面两点:

当n很小时,直接插入排序的效率较高;

当待排记录序列基本有序时,直接插入排序的效率也较高。

shell排序对直接插入排序算法进行改进。

10.2插入排序,10.2.3希尔排序(ShellsSort)2、示例:

原始序列49386597137627491.d=42.d=213382749497665973.d=11338274949766597排序结果1327384949657697,10.2插入排序,10.2.3希尔排序(ShellsSort)3、算法:

voidshellSort(rectyper,intn,intd,intk)for(l=0;

l0,10.2插入排序,10.2.3希尔排序(ShellsSort)4、算法分析:

Shell排序的平均比较次数和平均移动次数都为O(n1.3)左右Shell排序算法中增加了一个辅助空间。

Shell排序是不稳定的。

10.3交换排序,交换排序基本思想:

两两比较待排序记录的排序码,交换不满足排序要求的偶对,直到全部有序。

10.3交换排序,10.3.1冒泡排序(BubbleSort)1、基本思想:

设待排序记录顺序存放在R1,R2,R3,Rn中:

依次比较(R1,R2),(R2,R3),(Rn-1,Rn),不满足顺序则交换,结果,最大者在Rn中。

这叫一次起泡。

此后,再对存放在R1,R2,R3,Rn-1中n-1个记录作同样处理,结果,最大者在Rn-1中。

n-1次起泡能完成排序。

设置标志noswap表示本次起泡是否有交换,若无交换,表示排序完成。

10.3交换排序,10.3.1冒泡排序(BubbleSort)2、示例:

3849657613274997,4938659776132749,3849651327497697,3849132749657697,3813274949657697,1327384949657697,1327384949657697,初始123456,10.3交换排序,10.3.1冒泡排序(BubbleSort)3、算法:

voidbubbleSort(rectypeR,intn)i=1;

flag=1;

for(i=1;

iRj+1.key)tempRj+1;

Rj+1=Rj;

Rjtemp;

flag1;

10.3交换排序,10.3.1冒泡排序(BubbleSort)4、算法分析:

起泡排序的最坏时间复杂度为O(n2),平均时间复杂度为O(n2)。

起泡排序算法中增加一个辅助空间temp,辅助空间为S(n)=O

(1)。

起泡排序是稳定的。

10.3交换排序,10.3.2快速排序(QuickSort)1、基本思想:

快速排序的基本思想是:

从待排序记录序列中选取一个记录(通常选取第一个记录)作为“枢轴”,通过一趟排序(一次划分)将待排记录分割成独立的两部分,其中一部分记录的关键字比枢轴小,另一部分记录的关键字比枢轴大。

然后则可分别对这两部分记录继续进行划分,以达到整个序列有序。

一趟快速排序(一次划分)的具体做法是:

附设两个指针low和high,它们的初值分别是一个序列的第一个和最后一个记录的位置,设枢轴记录的关键字为pivotKey,在首先从high所指位置起向前搜索直到第一个关键字小于pivotKey的记录和枢轴记录交换,然后从low所指位置起向后搜索,找到第一个关键字大于pivotKey的记录和枢轴记录互相交换,重复交替这两步直到low=high为止。

10.3交换排序,10.3.2快速排序(QuickSort)2、示例:

设记录的关键码序列为:

4938659776132749对其进行快速排序。

10.3交换排序,10.3.2快速排序(QuickSort)3、算法:

intPartition(rectypeR,intn,intlow,inthigh)pivotkey=Rlow.key;

while(low=pivotkey)-high;

rlow=rhigh;

while(lowhigh),10.3交换排序,10.3.2快速排序(QuickSort)3、算法:

voidQSort(rectypeR,intn,intlow,inthigh)if(lowhigh)pivotloc=Partition(R,n,low,high);

QSort(R,low,pivotloc-1);

QSort(R,pivotloc+1,high);

voidQuickSort(rectypeR,intn)QSort(R,n,1,n);

10.3交换排序,10.3.2快速排序(QuickSort)4、算法分析:

最坏情况下,即当初始序列已经有序时,快速排序退化为起泡排序,为O(n2)。

最好时间复杂度为O(nlog2n)。

平均时间复杂度是T(n)=O(nlog2n)。

算法需要一个栈空间实现递归。

栈的大小取决于递归调用的深度,最多不超过n,理想情况下不超过log2n。

所以快速排序的辅助空间最坏为S(n)=O(n),最好为S(n)=O(log2n)。

快速排序是不稳定的。

10.4选择排序,选择排序(SelectionSort)的基本思想是:

每一趟在n-i+1(i=1,2,n-1)个记录中选取关键字最小的记录作为有序序列中第i个记录。

10.4选择排序,10.4.1简单选择排序(SimpleSelectionSort)1、基本思想:

第i趟简单选择排序是指通过n-i次关键字的比较,从n-i+1个记录中选出关键字最小的记录,并和第i个记录进行交换。

共需进行i-1趟比较,直到所有记录排序完成为止。

10.4选择排序,10.4.1简单选择排序(SimpleSelectionSort)2、示例:

4938659749132776,1338659749492776,1327659749493876,1327389749496576,1327384997496576,1327384949

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 简洁抽象

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1