数据结构课程设计(内部排序算法比较_C语言)
数据结构 内部排序算法比较

内部排序算法比较目录摘要 ......................................................................................... 错误!未定义书签。
1绪论 . (1)2系统分析 (1)2.1功能需求 (1)2.2数据需求 (1)2.3性能需求 (1)3总体设计 (1)3.1系统设计方案 (1)3.2功能模块设计 (2)4详细设计 (3)4.1数据结构定义 (3)4.2伪随机产生数据模块 (4)4.3简单选择排序模块 (5)4.4起泡排序模块 (6)4.5直接插入排序模块 (7)4.6希尔排序模块 (8)4.7快速排序模块 (9)4.8归并排序模块 (10)4.9条形图模块 (11)5调试与测试 (12)5.1调试 (12)5.2测试 .................................................................................. 错误!未定义书签。
6结论 .. (13)结束语 (13)参考文献 (14)附录1-用户手册 (15)附录2-源程序 (17)1绪论随着科技的快速发展,越来越多的企业不再浪费人力财力去计算一些统计性结果,而是应用一些简单的程序或系统来完成这些任务。
随着学习数据结构课程的深入,了解了不同排序算法的不同排序方法,每种排序对数据的比较次数、移动次数和排序用时都是不同的,本程序实现了六种内部排序算法的比较,并用条形图直观的显示出各种算法的优劣。
运用伪随机产生的数据,调用六种排序算法,记录其比较次数、移动次数和排序时间,再分别用条形图(星号表示)表示出来。
2系统分析2.1 功能需求(1)对起泡排序、直接插入排序、简单选择排序、快速排序、希尔排序、归并排序算法进行比较。
(2)待排序的元素的关键字为整数,其中数据要用伪随机产生程序产生,并且至少用5组的输入数据做比较,再使用各种算法对其进行排序,记录其排序时间,再汇总比较。
数据结构课程设计—内部排序算法比较

数据结构课程设计—内部排序算法比较在计算机科学领域中,数据的排序是一项非常基础且重要的操作。
内部排序算法作为其中的关键部分,对于提高程序的运行效率和数据处理能力起着至关重要的作用。
本次课程设计将对几种常见的内部排序算法进行比较和分析,包括冒泡排序、插入排序、选择排序、快速排序和归并排序。
冒泡排序是一种简单直观的排序算法。
它通过重复地走访要排序的数列,一次比较两个数据元素,如果顺序不对则进行交换,并一直重复这样的走访操作,直到没有要交换的数据元素为止。
这种算法的优点是易于理解和实现,但其效率较低,在处理大规模数据时性能不佳。
因为它在最坏情况下的时间复杂度为 O(n²),平均时间复杂度也为O(n²)。
插入排序的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入,直到整个序列有序。
插入排序在数据量较小时表现较好,其平均时间复杂度和最坏情况时间复杂度也都是 O(n²),但在某些情况下,它的性能可能会优于冒泡排序。
选择排序则是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(或最大)元素,然后放到已排序序列的末尾。
以此类推,直到全部待排序的数据元素排完。
选择排序的时间复杂度同样为O(n²),但它在某些情况下的交换操作次数可能会少于冒泡排序和插入排序。
快速排序是一种分治的排序算法。
它首先选择一个基准元素,将数列分成两部分,一部分的元素都比基准小,另一部分的元素都比基准大,然后对这两部分分别进行快速排序。
快速排序在平均情况下的时间复杂度为 O(nlogn),最坏情况下的时间复杂度为 O(n²)。
然而,在实际应用中,快速排序通常表现出色,是一种非常高效的排序算法。
归并排序也是一种分治算法,它将待排序序列分成若干个子序列,每个子序列有序,然后将子序列合并成一个有序序列。
[数据结构课程设计] 排序算法比较
![[数据结构课程设计] 排序算法比较](https://img.taocdn.com/s3/m/eaae1cad804d2b160a4ec07c.png)
《数据结构与算法分析》课程设计教学任务书一、课程设计的目的数据结构与算法课程主要是研究非数值计算的程序设计问题中所出现的计算机操作对象以及它们之间的关系和操作的学科。
数据结构是介于数学、计算机软件和计算机硬件之间的一门计算机专业的核心课程,它是计算机程序设计、数据库、操作系统、编译原理及人工智能等的重要基础,广泛的应用于信息学、系统工程等各种领域。
学习数据结构与算法是为了将实际问题中涉及的对象在计算机中表示出来并对它们进行处理。
通过课程设计可以提高学生的思维能力,促进学生的综合应用能力和专业素质的提高。
通过此次课程设计主要达到以下目的:了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;提高综合运用所学的理论知识和方法独立分析和解决问题的能力;训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风。
二、课程设计的基本要求1. 独立思考,独立完成:课程设计中各任务的设计和调试要求独立完成,遇到问题可以讨论,但不可以拷贝。
2. 做好上机准备:每次上机前,要事先编制好准备调试的程序,认真想好调试步骤和有关环境的设置方法,准备好有关的文件。
3. 按照课程设计的具体要求建立功能模块,每个模块要求按照如下几个内容认真完成:a)需求分析:在该部分中叙述,每个模块的功能要求b)概要设计:在此说明每个部分的算法设计说明(可以是描述算法的流程图),每个程序中使用的存储结构设计说明(如果指定存储结构请写出该存储结构的定义)c)详细设计:各个算法实现的源程序,对每个题目要有相应的源程序(可以是一组程序,每个功能模块采用不同的函数实现)源程序要按照写程序的规则来编写。
要结构清晰,重点函数的重点变量,重点功能部分要加上清晰的程序注释d)调试分析:测试数据,测试输出的结果,时间复杂度分析,和每个模块设计和调试时存在问题的思考(问题是那些,问题如何解决?),算法的改进设想课程设计总结:(保存在word文档中)总结可以包括:课程设计过程的收获、遇到的问题、解决问题过程的思考、程序调试能力的思考、对数据结构这门课程的思考、在课程设计过程中对《数据结构》课程的认识等内容4. 实现的结果必须进行检查和演示,程序源代码和程序的说明文件必须上交,作为考核内容的一部分。
数据结构课程设计--内部排序算法的比较

数据结构课程设计题目:内部排序算法的比较姓名:李吉倩学号:020*********系年级:计算机科学与技术2010级完成时间:2012.8-2012.9实验报告一、需求分析1.本程序对以下六种常用的内部排序进行实测比较:起泡排序、直接插入排序、简单选择排序、快速排序、希尔排序、堆排序。
2.待排序表的元素的关键字为整数,雍正徐、逆序和随机数产生器产生的随机数做测试比较。
比较的指标为有关键字参加的比较次数和关键字的移动次数(关键字交换记为3次移动)。
3.程序以用户和计算机的对话方式执行,即在计算机终端上显示“提示信息”下,用户可由键盘输入产生随机数的种子,计算机终端显示各内部排序的比较参数。
4.最终对结果做出简单分析,包括对各组数据得出结果波动大小给予解释。
二、概要设计1.可排序表的抽象数据类型定义:ADT OrderableList{数据对象:D = {ai |ai∈IntegerSet,i = 1,2,……,n,n >= 0}数据关系:R1 = {<ai-1,ai>|ai-1,ai∈D.i = 2,……,n}基本操作:SelectListType(c)操作结果:打印提示信息,请用户选择待排序表的类型,顺序型、逆序型还是随机数组。
BubbleSort(&L)操作结果:进行起泡排序,返回排序后的顺序表InsertSort(&L)操作结果:进行插入排序,返回排序后的顺序表SelectSort(&L)操作结果:进行选择排序,返回排序后的顺序表QuickSort(&L)操作结果:进行快速排序,返回排序后的顺序表ShellSort(&L)操作结果:进行希尔排序,返回排序后的顺序表HeapSort(&L)操作结果:进行堆排序,返回排序后的顺序表SelectSortMethod(&L,c1)操作结果:打印提示信息,请用户选择排序方法,起泡排序、插入排序、选择排序、快速排序、希尔排序还是堆排序OutPut(L)操作结果:打印排序中关键字的比较次数和移动次数}ADT OrderableList2.本程序包含两个模块:1).主程序模块int mian(){初始化;用户选择待测表的类型;输入选择,用switch语句判断;While(“命令”!= “退出”){接受命令;处理命令;}}2).可排序表单元模块----实现可排序表的抽象数据类型各模块之间的调用关系:主程序模块可排序表单元模块三、详细设计1.根据题目要求何可排序表的基本操作特点,可排序表采用证书顺序表存储结构,并实现在头文件SqList.H。
《数据结构》课程设计报告---排序算法的实现与比较

《数据结构》课程设计报告排序算法的实现与比较设计内容及要求编程实现插入、希尔、快速、堆排序、归并排序算法,并计算每种算法的比较、交换次数。
将待排数据从磁盘文件读入,实施排序后将数据写入另一个文件中。
概述在本设计课题中,我们将对常见的5中排序算法——插入、希尔、快速、堆排序、归并排序进行各种情况下的比较,如待排数据为顺序、逆序或随机的情况下,各个算法对于特定数据的性能。
基于此点考虑,在程序中选择采用以毫秒为单位的执行时间来衡量算法对特定数据的性能高低。
本文将主要介绍《排序之谜》程序(以下简称“程序”)的数据结构的设计、功能设计以及相关技术讨论等。
本程序在Microsoft Windows Server 2003/Microsoft Visual C++ 2005的命令行编译器cl.exe环境编译下通过。
分发包说明程序分发包中将包含以下文件,其用途分别如表格1所示。
数据结构设计主程序数据结构主程序中采用两个整型数组input_array和output_array,其长度均为10000,分别作为待排序数据和已排序数据的存放空间,并设置一整型数组sort_time用来存放5个算法的执行时间。
之所以这样设计,是因为所有的用户定义函数都完全按照既定的“标准”设计实现,使得整个程序的可伸缩性大大增强。
排序算法的设计实现程序中的全部5中排序算法均按照标准化的函数名、返回值和形参表设计,其形式为:1实现。
插入排序插入排序是一种最简单的排序方法,它的基本操作是将一个记录插入到已经排好序的有序表中,从而得到一个新的有序表。
快速排序1参见:参考资料[2]和[3]。
快速排序是对冒泡法排序的一种改进。
它的基本思想是,通过一趟排序将待排记录分割成独立的两部分,其中一部分记录均比另一部分记录小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。
归并排序归并排序的核心操作是将一位数组中前后两个相邻的有序序列归并为一个有序序列,其实现如下:并为相邻的有序序列,依次递归的执行下去,最终归并为一个有序序列。
内部排序比较(实验报告源程序)C参考模板

实验报告3实验名称:数据结构与软件设计实习题目:内部排序算法比较专业:生物信息学班级:01 姓名:学号:实验日期:2010.07.24一、实验目的:比较冒泡排序、直接插入排序、简单选择排序、快速排序、希尔排序;二、实验要求:待排序长度不小于100,数据可有随机函数产生,用五组不同输入数据做比较,比较的指标为关键字参加比较的次数和关键字移动的次数;对结果做简单的分析,包括各组数据得出结果的解释;设计程序用顺序存储。
三、实验内容对各种内部排序算法的时间复杂度有一个比较直观的感受,包括关键字比较次数和关键字移动次数。
将排序算法进行合编在一起,可考虑用顺序执行各种排序算法来执行,最后输出所有结果。
四、实验编程结果或过程:1. 数据定义typedef struct { KeyType key; }RedType; typedef struct { RedType r[MAXSIZE+1]; int length;}SqList;2. 函数如下,代码详见文件“排序比较.cpp”int Create_Sq(SqList &L)void Bubble_sort(SqList &L)//冒泡排序void InsertSort(SqList &L)//插入排序void SelectSort(SqList &L) //简单选择排序int Partition(SqList &L,int low,int high) void QSort(SqList &L,int low,int high)//递归形式的快速排序算法void QuickSort(SqList &L)void ShellInsert(SqList &L,int dk)//希尔排序void ShellSort(SqList &L,int dlta[ ])3. 运行测试结果,运行结果无误,如下图语速个数为20元素个数为100错误调试无。
数据结构 内部排序算法比较

内部排序算法比较1、课程设计的目的本课程设计为了更好的了解和认识数据结构常用的内部排序算法。
排序对于数据结构的管理来说是至关重要的,所以熟悉掌握和深入了解这些常用的经典内部排序算法是有必要的。
2、课程设计的要求1. 掌握常用的排序方法和各种排序方法的特点。
2.熟悉排序的基本概念。
3、课程设计的内容3.1需求分析编制一个演示内部排序算法比较的程序。
可对冒泡排序、直接插入排序、简单选择排序、快速排序、希尔排序和堆排序进行比较。
3.2概要设计(1)冒泡排序基本思想是:设数组a中存放了n 个数据元素,循环进行n-1次如下的排序过程:第一次时,依次比较相邻两个数据元素a[i]和a[i+1].key(i=0,1,2,3...,n-2).若为逆序,则交换两个数据元素,否则不交换,这样,当作完n-1次比较后数值最大的数据元素将比放置在a[n-1]中。
第二次时,数据元素个数减1,即数据元素个数为n-1,操作方法与第一次类似,这样,n个数据元素集合中数值次大的数据元素将被放置在a[n-2]中。
当第n-1次排序结束时,n个数据元素集合中次小的数据元素将被放置在a[1]中,而a[0]中放置了最小的数据元素。
冒泡排序算法的空间复杂度为o(n2)。
(2)直接插入排序基本思想是:顺序地把待插入的数据元素按其关键字的大小插入到已排序数据元素子集合的适当位置.子集合的数据元素个数从只有一个数据元素开始逐次增大,当子集合最终与集合大小相同时排序完毕.设待排序的N个数据元素存放在数组A中,初始时子集合a[0]以排好序.第一次循环准备把数据元素a[1]插入到以排好序的子集合中,这只需比较a[0].key和a[1].key,若a[0].key<=a[1].key,则说明序列已有序,否则,将a[1]插入到a[0]之前,这样子集合的大小增大为2;第二次循环是把数据元素a[2]插入到以排好序的子集合中,这需要先比较a[2].key和a[1].key,已确定是否需要把a[2]插到a[1]之前,然后比较a[2].key和a[0].key,以确定是否需要把a[2]插入到a[0]之前;这样的循环过程一直进行到a[n-1]插入完为止.这时,数据元素集合a[0],a[1],a[2],...,a[n-1]就全部排好了序。
数据结构(C语言版)实验报告-(内部排序算法比较)

《数据结构与算法》实验报告一、需求分析问题描述:在教科书中,各种内部排序算法的时间复杂度分析结果只给出了算法执行时间的阶,或大概执行时间。
试通过随机数据比较各算法的关键字比较次数和关键字移动次数,以取得直观感受。
基本要求:(l)对以下6种常用的内部排序算法进行比较:起泡排序、直接插入排序、简单选择排序、快速排序、希尔排序、堆排序。
(2)待排序表的表长不小于100000;其中的数据要用伪随机数程序产生;至少要用5组不同的输入数据作比较;比较的指标为有关键字参加的比较次数和关键字的移动次数(关键字交换计为3次移动)。
(3)最后要对结果作简单分析,包括对各组数据得出结果波动大小的解释。
数据测试:二.概要设计1.程序所需的抽象数据类型的定义:typedef int BOOL; //说明BOOL是int的别名typedef struct StudentData { int num; //存放关键字}Data; typedef struct LinkList { int Length; //数组长度Data Record[MAXSIZE]; //用数组存放所有的随机数} LinkList int RandArray[MAXSIZE]; //定义长度为MAXSIZE的随机数组void RandomNum() //随机生成函数void InitLinkList(LinkList* L) //初始化链表BOOL LT(int i, int j,int* CmpNum) //比较i和j 的大小void Display(LinkList* L) //显示输出函数void ShellSort(LinkList* L, int dlta[], int t,int* CmpNum, int* ChgNum) //希尔排序void QuickSort (LinkList* L, int* CmpNum, int* ChgNum) //快速排序void HeapSort (LinkList* L, int* CmpNum, int* ChgNum) //堆排序void BubbleSort(LinkList* L, int* CmpNum, int* ChgNum) //冒泡排序void SelSort(LinkList* L, int* CmpNum, int* ChgNum) //选择排序void Compare(LinkList* L,int* CmpNum, int* ChgNum) //比较所有排序2 .各程序模块之间的层次(调用)关系:二、详细设计typedef int BOOL; //定义标识符关键字BOOL别名为int typedef struct StudentData //记录数据类型{int num; //定义关键字类型}Data; //排序的记录数据类型定义typedef struct LinkList //记录线性表{int Length; //定义表长Data Record[MAXSIZE]; //表长记录最大值}LinkList; //排序的记录线性表类型定义int RandArray[MAXSIZE]; //定义随机数组类型及最大值/******************随机生成函数********************/void RandomNum(){int i; srand((int)time(NULL)); //用伪随机数程序产生伪随机数for(i=0; i小于MAXSIZE; i++) RandArray[i]<=(int)rand(); 返回;}/*****************初始化链表**********************/void InitLinkList(LinkList* L) //初始化链表{int i;memset(L,0,sizeof(LinkList));RandomNum();for(i=0; i小于<MAXSIZE; i++)L->Record[i].num<=RandArray[i]; L->Length<=i;}BOOL LT(int i, int j,int* CmpNum){(*CmpNum)++; 若i<j) 则返回TRUE; 否则返回FALSE;}void Display(LinkList* L){FILE* f; //定义一个文件指针f int i;若打开文件的指令不为空则//通过文件指针f打开文件为条件判断{ //是否应该打开文件输出“can't open file”;exit(0); }for (i=0; i小于L->Length; i++)fprintf(f,"%d\n",L->Record[i].num);通过文件指针f关闭文件;三、调试分析1.调试过程中遇到的问题及经验体会:在本次程序的编写和调试过程中,我曾多次修改代码,并根据调试显示的界面一次次调整代码。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构课程设计课程名称:内部排序算法比较年级/院系:11级计算机科学与技术学院姓名/学号:指导老师:第一章问题描述排序是数据结构中重要的一个部分,也是在实际开发中易遇到的问题,所以研究各种排算法的时间消耗对于在实际应用当中很有必要通过分析实际结合算法的特性进行选择和使用哪种算法可以使实际问题得到更好更充分的解决!该系统通过对各种内部排序算法如直接插入排序,冒泡排序,简单选择排序,快速排序,希尔排序,堆排序、二路归并排序等,以关键码的比较次数和移动次数分析其特点,并进行比较,估算每种算法的时间消耗,从而比较各种算法的优劣和使用情况!排序表的数据是多种不同的情况,如随机产生数据、极端的数据如已是正序或逆序数据。
比较的结果用一个直方图表示。
第二章系统分析界面的设计如图所示:|******************************||-------欢迎使用---------||-----(1)随机取数-------||-----(2)自行输入-------||-----(0)退出使用-------||******************************|请选择操作方式:如上图所示该系统的功能有:(1):选择1 时系统由客户输入要进行测试的元素个数由电脑随机选取数字进行各种排序结果得到准确的比较和移动次数并打印出结果。
(2)选择2 时系统由客户自己输入要进行测试的元素进行各种排序结果得到准确的比较和移动次数并打印出结果。
(3)选择0 打印“谢谢使用!!”退出系统的使用!!第三章系统设计(I)友好的人机界面设计:(如图3.1所示)|******************************||-------欢迎使用---------||-----(1)随机取数-------||-----(2)自行输入-------||-----(0)退出使用-------||******************************|(3.1)(II)方便快捷的操作:用户只需要根据不同的需要在界面上输入系统提醒的操作形式直接进行相应的操作方式即可!如图(3.2所示)|******************************||-------欢迎使用---------||-----(1)随机取数-------||-----(2)自行输入-------||-----(0)退出使用-------||******************************|请选择操作方式:(用户在此输入操作方式)(3.2)(III)系统采用定义结构体数组来存储数据。
(IV)功能介绍:(1)操作功能:a .当用户选择随即电脑随机取数时系统将弹出——>请输入你要输入的个数:(用户在此输入要电脑取数的个数)要是用户输入的数据过大系统将提醒错误——>超出范围重新输入!!!b . .当用户选择自行输入时系统将弹出——>请输入你要输入的个数(不大于于30的整数):当用户输完元素的个数之后系统将提示用户依次输入各个元素。
——>请输入各个元素:(2)排序功能:系统有简单选择排序,冒泡排序,堆排序,二路归并排序,快速排序的功能。
(3)打印清晰:系统会打印出在排序操作之前电脑随机取数或者用户输入的原始排列顺序;并将排序操作之后的有序数据打印在原始数据的下面以便用户的对比。
在排序操作结束之后系统将以直方图的形式打出排序过程中比较和移动次数让客户一目了然地看到排序的结果:第四章系统实现(一)定义结构体数组:typedef struct{ int key;} datatype;datatype R[MAXNUM];//定义结构体数组(二)直接排序:void D_InsertSort(datatype R[ ], int n)//直接排序{int i,j;for(i=2; i<=n; i++){ cn[0]++;if (R[i].key<R[i-1].key){R[0]=R[i]; mn[0]++;for(j=i-1; R[0].key<R[j].key; j--)R[j+1]=R[j];R[j+1]=R[0]; mn[0]+=2;}}}(三)简单选择排序:void Select_Sort(datatype R[ ],int n)//简单选择排序{int i,j,k;for(i=1;i<n;i++){ k=i;for(j=i+1; j<=n; j++){cn[1]++;if(R[j].key<R[k].key)k=j;}if (i=k){ R[0]=R[k];R[k]=R[i];R[i]=R[0]; mn[1]+=3; }}}(四)冒泡排序:void Bubble_Sort (datatype R[ ], int n)//冒泡排序{int i, j;int swap;for(i=1; i<n-1; i++){swap=0;for(j=1; j<=n-i; j++){cn[2]++;if (R[j].key<R[j+1].key){R[0]=R[j];R[j]=R[j+1];R[j+1]=R[0]; mn[2]+=3;swap=1;}}if(swap==0) break;}}(五)堆排序:void HeapAdjust(datatype R[ ], int s, int t){datatype rc;int i,j ;rc=R[s];i=s;for(j=2*i; j<=t; j=2*j){ cn[3]++;if(j<t && R[j].key<R[j+1].key)j=j+1;if(rc.key > R[j].key) break;R[i]=R[j]; mn[3]++;i=j;}R[i]=rc;}void HeapSort(datatype R[ ], int n)//堆排序{int i;for(i=n/2; i>0; i-- )HeapAdjust(R, i, n);for(i=n; i>1; i--){ R[0]=R[1];R[1]=R[i];R[i]=R[0]; mn[3]+=3;HeapAdjust(R,1, i-1);}}(六)归并排序:void Merge(datatype R[ ], datatype R1[ ], int s, int m , int t) {int i,j,k;i=s; j=m+1; k=s;while (i<=m&&j<=t){cn[4]++;if(R[i].key<R[j].key){ R1[k++]=R[i++]; mn[4]++;}else{ R1[k++]=R[j++]; mn[4]++;}}while (i<=m) { R1[k++]=R[i++]; mn[4]++; }while (j<=t) { R1[k++]=R[j++]; mn[4]++;}}void MSort(datatype R[ ], datatype R1[ ], int s, int t){int m;if(s==t) { R1[s]=R[s]; mn[4]++;}else {m=(s+t)/2;MSort(R, R1, s, m);MSort(R, R1, m+1, t);Merge(R1, R, s, m, t);}}void MergeSort(datatype R[ ], datatype R1[ ], int n)//归并排序{MSort(R, R1,1, n);}int Partition(datatype R[ ], int low, int high){R[0]=R[low]; mn[5]++;while(low<high){ while(low<high&&R[high].key>=R[0].key) {cn[5]++; high--;}if(low<high) { R[low]=R[high]; low++; mn[5]++; }while(low<high&&R[low].key<R[0].key) { mn[5]++; low++; } if(low<high) {R[high]=R[low]; high--; mn[5]++; }}R[low]=R[0]; mn[5]++;return low;}(七)快速排序:void Quick_Sort(datatype R[ ], int s, int t)//快速排序{int i;if( s<t ){i = Partition(R, s, t);Quick_Sort(R, s, i-1);Quick_Sort(R, i+1, t);}}void prin(datatype R[],int n){int i ;printf("排序的结果为:");for(i=1;i<=n;i++)printf("%d ",R[i]);printf("\n ");}(八)电脑随机取数:void sui_ji(){int i,n;datatype R[MAXNUM]={0};a: printf("请输入你要输入的个数:");scanf("%d",&n);if(n>25){printf("超出范围重新输入!!!\n");goto a;}addlist(R,n);printf("排序前元素顺序为:");for(i=1;i<n+1;i++) printf("%d ",R[i].key);printf("\n");D_InsertSort(R,n);//直接排序prin(R,n);Select_Sort(R,n);//简单选择排序Bubble_Sort(R, n);//冒泡排序HeapSort(R, n);//堆排序datatype R1[MAXNUM]={0};MergeSort(R, R1, n);//二路归并排序Quick_Sort(R,0, n);//快速排序}(九)用户自行输入:void zixing_input(){ int n,i;datatype R1[MAXNUM]={0};printf("请输入你要输入的个数(不大于于30的整数):");scanf("%d",&n);printf("请输入各个元素:");for(i=1;i<n+1;i++)scanf("%d",&R1[i].key);printf("排序前元素顺序为:");for(i=1;i<n+1;i++) printf("%d ",R1[i].key);printf("\n");D_InsertSort(R1,n);//直接排序prin(R1,n);Select_Sort(R1,n);//简单选择排序Bubble_Sort(R1, n);//冒泡排序HeapSort(R1, n);//堆排序datatype R2[MAXNUM]={0};MergeSort(R1, R2, n);//二路归并排序Quick_Sort(R1,0, n);//快速排序}(十)主函数调用:int main(void){int s;printf(" |******************************|\n");printf(" |-------欢迎使用-----------------|\n");printf(" |-----(1)随机取数-------------|\n");printf(" |-----(2)自行输入-------------|\n");printf(" |-----(0)退出使用-------------|\n");printf(" |******************************|\n");printf(" 请选择操作方式:");scanf("%d",&s);switch(s){case 1: system("cls") ; sui_ji(); break;case 2: system("cls") ; zixing_input(); break;case 0: printf(" 谢谢使用!!"); exit(0); break;}printf("\n ");printf(" 比较结果\n");printf(" \n");printf(" 排序方式比较次数移动次数\n");printf(" \n");printf(" 直接%d %d \n",cn[0],mn[0]); printf(" \n");printf(" 简单选择%d %d \n",cn[1],mn[1]); printf(" \n");printf(" 冒泡%d %d \n",cn[2],mn[2]); printf(" \n");printf(" 堆排序%d %d \n",cn[3],mn[3]);printf(" \n");printf(" 二路归并%d %d \n",cn[4],mn[4]);printf(" \n");printf(" 快速%d %d \n",cn[5],mn[5]);}第五章系统测试(一)随机取数的测试:(二)自行输入的测试:(三)退出系统:(四)时间的估算:参考文献1. 作者:严蔚敏《数据结构》清华大学出版社2012年5月教师评语和成绩2013 年9 月。