《第9章内部排序》习题解答论述.doc

  1. 1、本文档共20页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第9章内部排序 本章学习要点 ◆熟悉并掌握本章中各种内部排序方法的基本思想及其实现过程 ◆掌握各种内部排序算法的时间复杂度和空间复杂度的计算和分析方法 ◆了解各种内部排序方法的优缺点以及其不同的应用场合 ◆要求能够针对实际问题的特点选择合理的排序算法并通过编程实现 排序(Sorting)是计算机程序设计中的一种重要运算,它的功能是将一组数据元素按照其关键字的某种规定顺序(递增或递减)进行排列。对数据元素进行排序的目的是为了便于查找,在关键字有序的一组数据中的查找要比无序时更容易,速度也更快。 本章主要介绍几种常用的内部排序方法,主要有:插入排序、交换排序、选择排序、归并排序和基数排序。最后对各种排序算法的时间复杂度和空间复杂度进行了分析和比较,并且讨论了如何针对实际问题合理选择排序算法等内容。 9.1排序的有关概念和数组的输入与输出 9.1.1排序的概念 1.排序 将一个数据元素的任意序列,重新排列成一个按关键字有序(递增有序或递减有序)的序列的过程叫排序。 2.排序方法的稳定性 若在排序过程中,序列的两个关键字值相同的记录的相对位置不发生改变,则称所用的排序方法为稳定的;反之,若在某个序列的排序过程中关键字值相同的记录的相对位置发生了改变,则称所用的排序方法是不稳定的。 3.内部排序和外部排序 在排序过程中,如果待排序列全部读入计算机存储器中,则称此为内部排序;反之,若待排序列仅有部分记录在内存中,在排序过程中还要对外存中的纪录进行访问,这样的排序过程叫外部排序。 4.排序方法的性能分析 对于所选用的排序方法的好坏主要是基于其算法的时间复杂度和空间复杂度两方面进行分析。 5.数据元素类型说明 数据元素可以是任意一个结构类型,排序过程是按元素中的某个关键字(数据项)进行排序。不失一般性,我们在本章的所有例题中总是假定待排序列中的数据元素中只含有关键字项,且其数据类型为整型。 9.1.2一维数组的输入与输出 1.数组输入操作 函数void Input(int *A,int n)的功能是,从键盘输入n个整数到数组A[]中。 #includeiostream.h void Input(int *A,int n) { int i; cout请输入n个整数:\n; for(i=0;in;i++) cinA[i]; } 2.数组输出操作 函数void Output(int A[],int n)的功能是,依次显示输出数组A[]中的n个整数。 void Output(int A[],int n) { int i; cout结果为:\n; for(i=0;in;i++)coutA[i] ; coutendl; } 3.数组排序操作 函数void MainSort(void(*sort)(int*,int))的功能是,首先通过函数调用Input(A,n)输入n个整数到数组A[]中,再通过函数调用sort(A,n)对A[]中的n个整数排序,最后通过函数调用Out(A,n)显示输出数组A[]中的n个整数。 void MainSort(void(*sort)(int*,int)) { int *A,n; cout请输入整数的个数:\n; cinn; A=new int[n]; Input(A,n); cout原顺序; Output(A,n); sort(A,n); //调用sort对数组A进行处理 cout排序后的顺序; Out(A,n); delete[]A; } 9.2插入排序法 9.2.1直接插入排序(Straight Insertion Sort) 1.算法思想 对于任意排列的序列(a0,a1,a2,…,an-1),先将第一个记录看成是一个有序序列L1=(a0),再将第2个记录插入到L1中得到有序序列L2=(a0,a1)一般的,将第k+1个记录插入到有序序列Lk中得到有序序列Lk+1,如此重复插入n-1次即可得到有序序列Ln=(a0,a1,a2,…,an-1)。 2.举例说明 设原始序列为:8、3、5、2、9、7、*5、4 第1轮:(8) 3,5,2,9,7,*5,4 第2轮:(3,8) 5,2,9,7,*5,4 第3轮:(3,5,8) 2,9,7,*5,4 第4轮:(2,3,5,8) 9,7,*5,4 第5轮:(2,3,5,8,9) 7,*5,4 第6轮:(2,3,5,7,8,9) *5,4 第7轮:(2,3,5,*5,7,8,9) 4 第8轮:(2,3,4,5,*5,7,8,9) 3.算法实现 void InsertSort(int A[],int n) { int temp,i,j; for(i=0;in-1;i++) { for(temp=A[i

文档评论(0)

1112111 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档