ImageVerifierCode 换一换
格式:DOCX , 页数:13 ,大小:147KB ,
资源ID:6445776      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6445776.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据结构第8章内部排序.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数据结构第8章内部排序.docx

1、数据结构第8章 内部排序第8章 内部排序【例8-1】已知关键字序列(12,77,21,65,38,7,38,53),给出采用直接插入排序方法按关键字递增序排列时的每一趟结果。解: 初始 12 77 21 65 38 7 38 53 1趟 12 77 21 65 38 7 38 53 2趟 12 21 77 65 38 7 38 53 3趟 12 21 65 77 38 7 38 53 4趟 12 21 38 65 77 7 38 53 5趟 7 12 21 38 65 77 38 53 6趟 7 12 21 38 38 65 77 53 7趟 7 12 21 38 38 53 65 77 (

2、表示有序区)【例8-2】待排序列为( 39,80,76,41,13,29,50,78,30,11,100,7,41,86),步长因子分别取5、3、1,给出采用希尔排序方法按关键字递增序排列时的每一趟结果。解:排序过程如下:p=539 80 76 41 13 29 50 78 30 11 100 7 41 86 子序列分别为39,29,100,80,50,7,76,78,41,41,30,86,13,11。第一趟排序结果:p=3 29 7 41 30 11 39 50 76 41 13 100 80 78 86子序列分别为29,30,50,13,78,7,11,76,100,86,41,39,4

3、1,80。第二趟排序结果:p=1 13 7 39 29 11 41 30 76 41 50 86 80 78 100 此时,序列基本“有序”,对其进行直接插入排序,得到最终结果:7 11 13 29 30 39 41 41 50 76 78 80 86 100【例8-3】已知序列(17,18,60,40,7,32,73,65,85),请给出采用冒泡排序法对该序列作升序排序时的每一趟的结果。解:初始 1趟 2趟 3趟 4趟 5趟 17 17 17 17 7 718 18 18 7 17 1760 40 7 18 18 1840 7 32 32 32 327 32 40 40 40 4032 60

4、 60 60 60 6073 65 65 65 65 6565 73 73 73 73 7385 85 85 85 85 85( 表示有序区)【例8-4】已知关键字序列(38,12,21,77,65,7,38,53)给出采用快速排序方法按关键字增序排序时的第一趟块排过程,并举出一个反例说明快速排序是不稳定排序。解:(1)初始 38 12 21 77 65 7 38 53 low high第一次交换从high开始比较,得到的结果: 7 12 21 77 65 38 53 low high从low开始比较,得到的结果: 7 12 21 65 77 38 53 low high第二次交换从high开

5、始比较,得到的结果: 7 12 21 65 77 38 53 low highlow=high,所以第一趟快速排序的结果为:7 12 21 38 65 77 38 53关键字序列(2,2,1)可以作为一个反例。取第一个关键字作为支点,在一趟快排之后的结果是(1,2,2),由于2已在排序后的最终位置,2在2划分出的前一部分子表中,所以2不可能再出现在2之后,即不可能与原始序列中两者的顺序一致。此反例说明快速排序不是稳定排序。【例8-5】已知序列(503,87,512,61,908,170,897,275,653,462),给出采用堆排序方法按关键字递增排序时的每一趟结果。解:各趟结果如图8-1所

6、示 习题8一、单项选择题 1. 若对n个元素进行直接插入排序,在进行第i趟排序时,假定元素ri+1的插入位置为rj,则需要移动元素的次数为(1. D)。A. j-i B. i-j-1 C. i-j D. i-j+1 2. 若对n个元素进行直接插入排序,则进行任一趟排序的过程中,为寻找插入位置而需要的时间复杂度为( 2. B)。A. O(1) B. O(n) C. O(n2) D. O(log2n) 3. 在对n个元素进行直接插入排序的过程中,共需要进行(3. C)趟。A. n B. n+1 C. n-1 D. 2n 4. 对n个元素进行直接插入排序时间复杂度为( 4. C)。A. O(1) B

7、. O(n) C. O(n2) D. O(log2n) 5. 在对n个元素进行冒泡排序的过程中,第一趟排序至多需要进行(5. B)对相邻元素之间的交换。 A. n B. n-1 C. n+1 D. n/2 6. 在对n个元素进行冒泡排序的过程中,最好情况下的时间复杂度为(6. D )。 A. O(1) B. O(log2n) C. O(n2) D. O(n) 7. 在对n个元素进行冒泡排序的过程中,至少需要( 7. A)趟完成。 A. 1 B. n C. n-1 D. n/2 8. 在对n个元素进行快速排序的过程中,若每次划分得到的左、右两个子区间中元素的个数相等或只差一个,则整个排序过程得到

8、的含两个或两个元素的区间个数大致为( 8. B)。 A. n B. n/2 C. log2n D. 2n 9. 在对n个元素进行快速排序的过程中,第一次划分最多需要移动(9. D )次元素,包括开始把支点元素移动到临时变量的一次在内。 A. n/2 B. n-1 C. n D. n+1 10. 在对n个元素进行快速排序的过程中,最好情况下需要进行( 10. C)躺。 A. n B. n/2 C. log2n D. 2n 11. 在对n个元素进行快速排序的过程中,最坏情况下需要进行(11. B )躺。 A. n B. n-1 C. n/2 D. log2n 12. 在对n个元素进行快速排序的过程

9、中,平均情况下的时间复杂度为(12. D )。 A. O(1) B. O(log2n) C. O(n2) D. O(nlog2n) 13. 在对n个元素进行快速排序的过程中,最坏情况下的时间复杂度为( 13. C)。 A. O(1) B. O(log2n) C. O(n2) D. O(nlog2n) 14. 在对n个元素进行快速排序的过程中,平均情况下的空间复杂度为(14. D)。 A. O(1) B. O(log2n) C. O(n2) D. O(nlog2n) 15. 在对n个元素进行直接插入排序的过程中,算法的空间复杂度为( 15. A)。 A. O(1) B. O(log2n) C.

10、O(n2) D. O(nlog2n) 16. 对下列四个序列进行快速排序,各以第一个元素为基准进行第一次划分,则在该次划分过程中需要移动元素次数最多的序列为(16. D)。 A. 1, 3, 5, 7, 9 B. 9, 7, 5, 3, 1 C. 5, 3, 1, 7, 9 D. 5, 7, 9, 1, 3 17. 假定对元素序列(7, 3, 5, 9, 1, 12, 8, 15)进行快速排序,则进行第一次划分后,得到的左区间中元素的个数为(17. B)。 A. 2 B. 3 C. 4 D. 5 18. 在对n个元素进行简单选择排序的过程中,需要进行(18. C)趟选择和交换。 A. n B.

11、 n+1 C. n-1 D. n/2 19. 在对n个元素进行堆排序的过程中,时间复杂度为( 19. D )。 A. O(1) B. O(log2n) C. O(n2) D. O(nlog2n) 20. 在对n个元素进行堆排序的过程中,空间复杂度为( 20. A)。 A. O(1) B. O(log2n) C. O(n2) D. O(nlog2n) 21. 假定对元素序列(7, 3, 5, 9, 1, 12)进行堆排序,并且采用小根堆,则由初始数据构成的初始堆为(21. B)。 A. 1, 3, 5, 7, 9, 12 B. 1, 3, 5, 9, 7, 12 C. 1, 5, 3, 7, 9

12、, 12 D. 1, 5, 3, 9, 12, 7 22. 假定一个初始堆为(1, 5, 3, 9, 12, 7, 15, 10),则进行第一趟堆排序后得到的结果为(22. A)。 A. 3, 5, 7, 9, 12, 10, 15, 1 B. 3, 5, 9, 7, 12, 10, 15, 1 C. 3, 7, 5, 9, 12, 10, 15, 1 D. 3, 5, 7, 12, 9, 10, 15, 1 23. 若对n个元素进行归并排序,则进行归并的趟数为(23. D)。 A. n B. n-1 C. n/2 D. log2n 24. 若一个元素序列基本有序,则选用( 24. A)方法较

13、快。 A. 直接插入排序 B. 简单选择排序 C. 堆排序 D. 快速排序 25. 若要从1000个元素中得到10个最小值元素,最好采用(25. B )方法。 A. 直接插入排序 B. 简单选择排序 C. 堆排序 D. 快速排序 26. 若要对1000个元素排序,要求既快又稳定,则最好采用(26. B)方法。 A. 直接插入排序 B. 归并排序 C. 堆排序 D. 快速排序 27. 若要对1000个元素排序,要求既快又节省存储空间,则最好采用( 27. C)方法。 A. 直接插入排序 B. 归并排序 C. 堆排序 D. 快速排序 28. 在平均情况下速度最快的排序方法为(28. D )。 A.

14、 简单选择排序 B. 归并排序 C. 堆排序 D. 快速排序二、填空题1. 每次从无序子表中取出一个元素,把它插入到有序子表中的适当位置,此种排序方法叫做_排序;每次从无序子表中挑选出一个最小或最大元素,把它交换到有序表的一端,此种排序方法叫做_排序。1. 插入,选择 2每次直接或通过支点元素间接比较两个元素,若出现逆序排列时就交换它们的位置,此种排序方法叫做_排序;每次使两个相邻的有序表合并成一个有序表的排序方法叫做_排序。2. 快速,归并3在简单选择排序中,记录比较次数的时间复杂度为_,记录移动次数的时间复杂度为_。3. O(n2),O(n) 4. 对n个记录进行冒泡排序时,最少的比较次数

15、为_,最少的趟数为_。4. n-1,15. 快速排序在平均情况下的时间复杂度为_,在最坏情况下的时间复杂度为_。5. O(nlog2n),O(n2) 6. 若对一组记录(46,79,56,38,40,80,35,50,74)进行直接插入排序,当把第8个记录插入到前面已排序的有序表时,为寻找插入位置需比较_次。6. 47. 假定一组记录为(46,79,56,38,40,84),则利用堆排序方法建立的初始小根堆为_。7. (38,40,56,79,46,84) 8. 假定一组记录为(46,79,56,38,40,84),在冒泡排序的过程中进行第一趟排序后的结果为_。 8. (46,56,38,40

16、,79,84)9. 假定一组记录为(46,79,56,64,38,40,84,43),在冒泡排序的过程中进行第一趟排序时,元素79将最终下沉到其后第_个元素的位置。9. 4 10. 假定一组记录为(46,79,56,38,40,80),对其进行快速排序的过程中,共需要_趟排序。10. 311. 假定一组记录为(46,79,56,38,40,80),对其进行快速排序的过程中,含有两个或两个以上元素的排序区间的个数为_个。11. 4 12. 假定一组记录为(46,79,56,25,76,38,40,80),对其进行快速排序的第一次划分后,右区间内元素的个数为_。12. 4 13. 假定一组记录为(

17、46,79,56,38,40,80),对其进行快速排序的第一次划分后的结果为_。1340 38 46 56 79 80 14. 假定一组记录为(46,79,56,38,40,80,46,75,28,46),对其进行归并排序的过程中,第二趟归并后的子表个数为_。14315. 假定一组记录为(46,79,56,38,40,80,46,75,28,46),对其进行归并排序的过程中,第三趟归并后的第2个子表为_。15. 28 46 16. 假定一组记录为(46,79,56,38,40,80,46,75,28,46),对其进行归并排序的过程中,供需要_趟完成。16. 417. 在时间复杂度为O(nlog

18、2n)的所有排序方法中,_排序方法是稳定的。17. 归并 18. 在时间复杂度为O(n2)的所有排序方法中,_排序方法是不稳定的。18. 直接选择 19. 在所有排序方法中,_排序方法采用的是二分法的思想。19. 快速 20. 在所有排序方法中,_方法使数据的组织采用的是完全二叉树的结构。20. 堆排序 21. 在所有排序方法中,_方法采用的是两两有序表合并的思想。21. 归并排序 22. _排序方法使键值大的记录逐渐下沉,使键值小的记录逐渐上浮。 22. 冒泡 23. _排序方法能够每次使无序表中的第一个记录插入到有序表中。23. 直接插入 24. _排序方法能够每次从无序表中顺序查找出一个

19、最小值。24. 直接选择三、应用题1. 已知一组记录为(46,74,53,14,26,38,86,65,27,34),给出采用直接插入排序法进行排序时每一趟的排序结果。1. (0) 46 74 53 14 26 38 86 65 27 34 (1) 46 74 53 14 26 38 86 65 27 34 (2) 46 53 74 14 26 38 86 65 27 34 (3) 14 46 53 74 26 38 86 65 27 34 (4) 14 26 46 53 74 38 86 65 27 34 (5) 14 26 38 46 53 74 86 65 27 34 (6) 14 26

20、 38 46 53 74 86 65 27 34 (7) 14 26 38 46 53 65 74 86 27 34 (8) 14 26 27 38 46 53 65 74 86 34 (9) 14 26 27 34 38 46 53 65 74 862. 已知一组记录为(46,74,53,14,26,38,86,65,27,34),给出采用冒泡排序法进行排序时每一趟的排序结果。2. (0) 46 74 53 14 26 38 86 65 27 34 (1) 46 53 14 26 38 74 65 27 34 86 (2) 46 14 26 38 53 65 27 34 74 86 (3)

21、14 26 38 46 53 27 34 65 74 86 (4) 14 26 38 46 27 34 53 65 74 86 (5) 14 26 38 27 34 46 53 65 74 86 (6) 14 26 27 34 38 46 53 65 74 86 (7) 14 26 27 34 38 46 53 65 74 863. 已知一组记录为(46,74,53,14,26,38,86,65,27,34),给出采用快速排序法进行排序时每一趟的排序结果。3. (0) 46 74 53 14 26 38 86 65 27 34 (1) 34 27 38 14 26 46 86 65 53 74

22、 (2) 26 27 14 34 38 46 74 65 53 86 (3) 14 26 27 34 38 46 53 65 74 86 (4) 14 26 27 34 38 46 53 65 74 864. 已知一组记录为(46,74,53,14,26,38,86,65,27,34),给出采用简单选择排序法进行排序时每一趟的排序结果。4. (0) 46 74 53 14 26 38 86 65 27 34 (1) 14 74 53 46 26 38 86 65 27 34 (2) 14 26 53 46 74 38 86 65 27 34 (3) 14 26 27 46 74 38 86 6

23、5 53 34 (4) 14 26 27 34 74 38 86 65 53 46 (5) 14 26 27 34 38 74 86 65 53 46 (6) 14 26 27 34 38 46 86 65 53 74 (7) 14 26 27 34 38 46 53 65 86 74 (8) 14 26 27 34 38 46 53 65 86 74 (9) 14 26 27 34 38 46 53 65 74 865. 已知一组记录为(46,74,53,14,26,38,86,65,27,34),给出采用堆排序法进行排序时每一趟的排序结果。5.构成初始堆(即建堆)的过程: 1 2 3 4

24、5 6 7 8 9 10 (0) 46 74 53 14 26 38 86 65 27 34 (1) 46 74 53 14 26 38 86 65 27 34 (2) 46 74 53 14 26 38 86 65 27 34 (3) 46 74 38 14 26 53 86 65 27 34 (4) 46 14 38 27 26 53 86 65 74 34 (5) 14 26 38 27 34 53 86 65 74 46 进行堆排序的过程: (0) 14 26 38 27 34 53 86 65 74 46 (1) 26 27 38 46 34 53 86 65 74 14 (2) 2

25、7 34 38 46 74 53 86 65 26 14 (3) 34 46 38 65 74 53 86 27 26 14 (4) 38 46 53 65 74 86 34 27 26 14 (5) 46 65 53 86 74 38 34 27 26 14 (6) 53 65 74 86 46 38 34 27 26 14 (7) 65 86 74 53 46 38 34 27 26 14 (8) 74 86 65 53 46 38 34 27 26 14 (9) 86 74 65 53 46 38 34 27 26 146. 已知一组记录为(46,74,53,14,26,38,86,65

26、,27,34),给出采用归并排序法进行排序时每一趟的排序结果。6. (0) 46 74 53 14 26 38 86 65 27 34 (1) 46 74 14 53 26 38 65 86 27 34 (2) 14 46 53 74 26 38 65 86 27 34 (3) 14 26 38 46 53 65 74 86 27 34 (3) 14 26 27 34 38 46 53 65 74 86四、算法设计题 1. 编写一个双向起泡的排序算法,即相邻两趟向相反方向起泡。1.void Bubble_Sort2(int a ,int n) /相邻两趟是反方向起泡的冒泡排序算法 low=0;

27、high=n-1; /冒泡的上下界 change=1; while (lowhigh&change) change=0; for(i=low;iai+1) aiai+1; change=1; high-; /修改上界 for (i=high;ilow;i-) /从下向上起泡 if (aiai-1) aiai-1; change=1; low+; /修改下界 /while /Bubble_Sort2 2. 试以单链表为存储结构实现简单选择排序的算法。 2.void LinkList_Select_Sort(LinkList &L) /单链表上的简单选择排序算法 for (p=L;p-next-next;p=p-next) q=p-next; x=q-data; for (r=q,s=q;r-next;r=r-next) /在q后面寻找元素值最小的结点 if (r-next-datanext-data; s=r; if (s!=q) /找到了值比q-data更小的最小结点s-next p-next=s-next; s-next=q; t=q-next; q-next=p-next-next; p-next-next=t; /交换q和s-next两个结点 /for /LinkList_Select_Sort

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

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