数据结构课程设计(内部排序算法比较).doc

合集下载

数据结构 内部排序算法比较

数据结构 内部排序算法比较

内部排序算法比较目录摘要 ......................................................................................... 错误!未定义书签。

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组的输入数据做比较,再使用各种算法对其进行排序,记录其排序时间,再汇总比较。

数据结构专业课程设计十种排序算法比较样本

数据结构专业课程设计十种排序算法比较样本

数据结构专业课程设计十种排序算法比较合肥学院计算机科学与技术系课程设计报告2014 ~2015 学年第学期课程数据结构与算法课程设计名称内部排序算法比较学生姓名学号专业班级指导教师2015 年1 月【课题22、】内部排序算法比较一、问题分析和任务定义各种内部排序算法的时间复杂度分析结果只给出了算法执行时间的阶,或大概执行时间。

试通过随机的数据比较各算法的关键字比较次数和关键字移动次数,以取得直观感受。

根据对本设计任务要求的理解和分析,按以下两点问题进行分析:题目要求对十种排序算法进行比较,比较的主要内容是关键字的比较次数和移动次数,其中待排序数用。

二、数据结构的选择和概要设计为了实现十种排序算法,产生的随机数用顺序表存储比较方便。

顺序表数据类型(存储结构)描述如下:typedef int KeyType;struct rec{KeyType key;};typedef rec sqlist[N];:(1) void gensort(int b[],int n)起泡排序(2) void insertsort(sqlist b,int n)插入排序(3) void so(sqlist num,int n)折半插入排序(4) void shellsort(sqlist b,int n)希尔排序(5) void gentsort(int b[],int n)选择排序(6) void output(sqlist b,int n)快速排序(7) void sort3(sqlist nu,int n) //2-路插入排序(8) void Merge(sqlist a, sqlist b, int low, int mid, int high)二路归并排序(9) void MergePass(sqlist a, sqlist b, int n, int lenth)一趟归并排序(10) void MergeSort(sqlist a, int n) //进行二路归并(11) void sift(sqlist r,int s,int m) 堆排序(12) void init(int a[])//随机生成N个整数三、详细设计和编码在整个课程设计中,要求实现要求的功能,必须要有主函数,并通过主函数调用各功能子模块,以上展示各个模块的功能,以下将分析主函数和各个模块中的具体算法和实现。

数据结构课程设计各种排序算法比较附带源代码.doc

数据结构课程设计各种排序算法比较附带源代码.doc

数据结构课程设计各种排序算法比较附带源代码.课程设计课程:数据结构题目:排序算法比较专业班级:姓名:学号:设计时间:指导教师:设计题目排序算法比较运行环境(软、硬件环境)操作系统windows运行环境vc6.0算法设计的思想大架构采用模块化编程的思想,将每个不同的功能分别写成不同的子程序,分别进行封装构成各个小的模块,最后将各个模块组合起来。

在每个子程序的编写过程中特事特办面对不同的预想功能采取不同的数据结构不同的算法实现。

总体算法思想为按功能分块,依照预想功能实现顺序拼装。

具体思想请见流程图。

流程图开始功能流程图请用户输入将要生成随机数的上下限,按照上下限生成30000个随机数并输出随机生成随机数并输出请用户选择想要使用的排序方法计算其使用的排序时间并输出询问用户是否继续运行程序否是输出结束语句结束程序编写流程图开始定义全局变量a[30000],aaaa[3000],结构体数组aa[30000]用来存放随机数,choice,choice1编写各个子算法子函数,和时间选择函数,既菜单选择函数,部分需要声明的函数在头文件下声明。

各模块依据功能流程图组装结束算法流程图开始局部变量l,h收集上下限,sjs()将用户选择数值赋值于choice,将choice作为参数调用time(),用if语句判断选择将要调用的算法子函数main1()menu()choice1==1Choice1==2结束算法设计分析程序总体采用模块化设计,程序间通过传参和调用进行有机组合。

这样的总体布局将将各个功能隔离开来,每个模块负责每个模块的功能,使得程序的布局简单明了。

且子程序只有在被调用时才会运行大大节约系统资源减少了运算时间。

同时由于功能的隔离使得程序的扩展性大大提高,无论程序将要任何改动时,都会方便很多。

源代码#include#include#includeint a[30000];int choice;int choice1;struct xlx{ int key; int link;} aa[30000];int aaa[300000];void main1();/*************************直接插入排序函数***********************/void direct(int a[]){printf("\n现在使用直接插入排序法进行排序:\n");int i,j,w; for(i=0;i=0;j-数据结构题目:排序算法比较专业班级:姓名:学号:设计时间:指导教师:设计题目排序算法比较运行环境(软、硬件环境)操作系统windows运行环境vc6.0算法设计的思想大架构采用模块化编程的思想,将每个不同的功能分别写成不同的子程序,分别进行封装构成各个小的模块,最后将各个模块组合起来。

(完整)数据结构(C语言版)实验报告 (内部排序算法比较)

(完整)数据结构(C语言版)实验报告 (内部排序算法比较)

(完整)数据结构(C语言版)实验报告 (内部排序算法比较)编辑整理:尊敬的读者朋友们:这里是精品文档编辑中心,本文档内容是由我和我的同事精心编辑整理后发布的,发布之前我们对文中内容进行仔细校对,但是难免会有疏漏的地方,但是任然希望((完整)数据结构(C语言版)实验报告 (内部排序算法比较))的内容能够给您的工作和学习带来便利。

同时也真诚的希望收到您的建议和反馈,这将是我们进步的源泉,前进的动力。

本文可编辑可修改,如果觉得对您有帮助请收藏以便随时查阅,最后祝您生活愉快业绩进步,以下为(完整)数据结构(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]。

数据结构课程设计—内部排序算法比较

数据结构课程设计—内部排序算法比较

数据结构课程设计—内部排序算法比较在计算机科学领域中,数据的排序是一项非常基础且重要的操作。

内部排序算法作为其中的关键部分,对于提高程序的运行效率和数据处理能力起着至关重要的作用。

本次课程设计将对几种常见的内部排序算法进行比较和分析,包括冒泡排序、插入排序、选择排序、快速排序和归并排序。

冒泡排序是一种简单直观的排序算法。

它通过重复地走访要排序的数列,一次比较两个数据元素,如果顺序不对则进行交换,并一直重复这样的走访操作,直到没有要交换的数据元素为止。

这种算法的优点是易于理解和实现,但其效率较低,在处理大规模数据时性能不佳。

因为它在最坏情况下的时间复杂度为 O(n²),平均时间复杂度也为O(n²)。

插入排序的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入,直到整个序列有序。

插入排序在数据量较小时表现较好,其平均时间复杂度和最坏情况时间复杂度也都是 O(n²),但在某些情况下,它的性能可能会优于冒泡排序。

选择排序则是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(或最大)元素,然后放到已排序序列的末尾。

以此类推,直到全部待排序的数据元素排完。

选择排序的时间复杂度同样为O(n²),但它在某些情况下的交换操作次数可能会少于冒泡排序和插入排序。

快速排序是一种分治的排序算法。

它首先选择一个基准元素,将数列分成两部分,一部分的元素都比基准小,另一部分的元素都比基准大,然后对这两部分分别进行快速排序。

快速排序在平均情况下的时间复杂度为 O(nlogn),最坏情况下的时间复杂度为 O(n²)。

然而,在实际应用中,快速排序通常表现出色,是一种非常高效的排序算法。

归并排序也是一种分治算法,它将待排序序列分成若干个子序列,每个子序列有序,然后将子序列合并成一个有序序列。

内部排序算法比较课程设计报告(7种基本排序)

内部排序算法比较课程设计报告(7种基本排序)

合肥学院计算机科学与技术系1、问题分析和任务定义各种内部排序算法的时间复杂度分析结果只给出了算法执行时间的阶,或大概执行时间,存在一定的却缺陷。

我们将通过随机的数据比较各算法的关键字比较次数和关键字移动次数,以取得直观感受。

所设计的程序应能够将产生的随机数据同时用不同的内部排序算法排序,并列出关键字比较次数与移动次数,方便比较。

待排序表的表长不少于100,为方便起见,我们令表长等于100,用5组随机的数据排序的结果作比较。

2、数据结构的选择和概要设计一.可能排序表的抽象数据类型定义:ADTOrderableList{数据对象:D={|∈IntegerSet,i=1,2,……,n,n≥0}数据关系:R1={<,|,∈D,i=2,……n}基本操作:InitList(n)操作结果:构造一个长度为n,元素值依次为1,2,……,n的有序表。

RandomizeList(d,isInverseOrder)操作结果:首先根据isInverseOrder为True或False,将表置为逆序或正序,然后将表进行d(0≤d≤8)级随机打乱。

d为0时表不打乱,d越大,打乱程度越高。

RecallList()操作结果:恢复最后一次用RandomizeList随机大乱的可排序表。

ListLength()操作结果:返回可排序的长度。

ListEmpty()操作结果:若可排序表为空表,则返回True,否则返回False。

BubbleSort(&c,&s)操作结果:进行冒泡排序,返回关键字比较次数c和移动次数s。

InsertSort(&c,&s)操作结果:进行插入排序,返回关键字比较次数c和移动次数s。

SelectSort(&c,&s)操作结果:进行选择排序,返回关键字比较次数c和移动次数s。

QuickSort(&c,&s)操作结果:进行快速排序,返回关键字比较次数c和移动次数s。

数据结构课程设计(内部排序算法性能分析)

“数据结构”课程设计报告(内部排序算法性能分析)学生姓名:指导教师:所在系:所学专业:年级:目录1、需求分析..................................................... - 1 -1.1、选题要求 (1)1.2、选题的意义及背景 (1)1.3、课程设计目标 (1)2、概要设计..................................................... - 2 -2.1、原始数据 (2)2.2、输出数据 (2)2.3、数据处理 (2)2.4、逻辑结构及物理结构 (3)2.5、系统的模块划分及模块功能 (3)2.5.1主程序模块....................................................................................................... - 3 -2.5.2可排序表单元模块........................................................................................... - 3 -2.6、模块的测试数据 (4)3、详细分析..................................................... - 5 -4、调试分析..................................................... - 6 -5、用户手册..................................................... - 9 -6、测试结果.................................................... - 10 -6.1测试用例及选择原因 (10)6.2测试结果 (10)7、总结........................................................ - 12 -8、参考文献.................................................... - 13 -9、小组人员分工................................................ - 13 -致谢......................................................... - 13 -1、需求分析1.1、选题要求对各种排序算法进行定量的性能分析。

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

`课题:内部排序算法比较…第一章问题描述排序是数据结构中重要的一个部分,也是在实际开发中易遇到的问题,所以研究各种排算法的时间消耗对于在实际应用当中很有必要通过分析实际结合算法的特性进行选择和使用哪种算法可以使实际问题得到更好更充分的解决!该系统通过对各种内部排序算法如直接插入排序,冒泡排序,简单选择排序,快速排序,希尔排序,堆排序、二路归并排序等,以关键码的比较次数和移动次数分析其特点,并进行比较,估算每种算法的时间消耗,从而比较各种算法的优劣和使用情况!排序表的数据是多种不同的情况,如随机产生数据、极端的数据如已是正序或逆序数据。

比较的结果用一个直方图表示。

第二章系统分析界面的设计如图所示:!|******************************||-------欢迎使用---------||-----(1)随机取数-------||-----(2)自行输入-------||-----(0)退出使用-------||******************************|~请选择操作方式:如上图所示该系统的功能有:(1):选择 1 时系统由客户输入要进行测试的元素个数由电脑随机选取数字进行各种排序结果得到准确的比较和移动次数并打印出结果。

(2)选择 2 时系统由客户自己输入要进行测试的元素进行各种排序结果得到准确的比较和移动次数并打印出结果。

(3)选择0 打印“谢谢使用!!”退出系统的使用!!、第三章系统设计(I)友好的人机界面设计:(如图所示)|******************************||-------欢迎使用---------||-----(1)随机取数-------||-----(2)自行输入-------||-----(0)退出使用-------||******************************|:()(II)方便快捷的操作:用户只需要根据不同的需要在界面上输入系统提醒的操作形式直接进行相应的操作方式即可!如图(所示)|******************************||-------欢迎使用---------||-----(1)随机取数-------||-----(2)自行输入-------||-----(0)退出使用-------||******************************|;请选择操作方式:(用户在此输入操作方式)()(III)系统采用定义结构体数组来存储数据。

数据结构 各种内排序性能比较 课程设计报告

数据结构课程设计报告题目:各种内排序性能比较学生姓名:学号:班级:指导教师:2011-6-13目录1、需求分析说明 (2)1.1所需完成的任务及要求1.2程序实现的功能2、总体设计 (3)2.1 总体设计说明2.2 总体流程图2.3各主程序详细流程图3、详细设计 (7)3.1使用的算法思想3.2各个算法的效率简析4、实现部分 (8)4.1程序算法的代码5、程序测试 (15)5.1程序运行的主界面5.2 各算法运行界面6、总结 (18)1、需求分析说明排序是数据处理中经常遇到的一种重要操作。

然而排序的算法有很多,各有其优缺点和使用场合。

本程序的设计的主要目的是通过比较各种内部排序(包括:插入法排序、起泡法、选择法、快速法、合并法排序)的时间复杂度,即元素比较次数和移动次数,来分析各种算法优缺点和适合排列何种序列。

达到在实际应用中选择合适的方法消耗最短的时间完成排序。

1.1所需完成的任务及要求任务:1)用程序实现插入法排序、起泡法、选择法、快速法、合并法排序;2)输入的数据形式为任何一个正整数,大小不限。

要求:排序后的数组是从小到大的;1.2程序实现的功能(1)使用随机函数实现数组初始化,生成多组元素个数不同的数组;(2)用列表打印出每种排序下的各趟排序结果;(3)打印使用各种排序算法以后元素比较和交换的次数;(4)设计合理的打印列表来打印。

2、总体设计(从总体上说明该题目的框架,用文字和图表说明)2.1 总体设计说明采用插入气泡,选择,快速,合并的方法实现各种排序算法,并且在实现过程中插入适当变量来实现计数元素交换次数和比较次数的统计。

对于每一趟比较之后元素顺序以及最后的结果使用单独的函数来实现,形成单独的一个模块;2.2 总体流程图2.3 各主程序详细流程图①主函数流程图:3、详细设计3.1 使用的算法思想(1)对主界面的menu菜单,在主函数里面用switch语句调用各个模块的功能调用;(2)在插入法时,其算法思想是:将第一个元素作为单独的一个数组独立出来,对剩下的元素,逐个与前面的数组从后往前进行比较,一旦发现当前的元素大于或是等于前面已经排序好的元素中某个元素,则在这个元素之后插入即可;(3)在起泡法时,其算法思想是:将待排序的数组从后往前,依次比较相邻的两个元素,如果发现逆序则交换序列,使得数值、比较小的元素逐渐往前排列,在这个算法时要用flag作为标记位,用来判断元素是否交换,用以减少不必要的交换次数;(4)对于选择法,其排序思想是:从第一个元素开始,并且标记当前元素的位置,比较后面所有的元素,找到其中最小的元素,也标记当前元素的位置,然后把两个标记位的元素进行交换,前面的标记位不断地向后移动,直到最后一个元素的位置,则排序完成;(5)对于快速法,其算法思想是:一般取数组中的第一个元素为基准,通过一趟排序将待排序元素分为左右两个子序列,左子序列的所有元素都小于或等于右子序列的所有元素,然后将左右两个序列按照与此相同的原理进行排序,直至整个序列有序为止,排序完成。

内部排序算法比较课程设计报告种基本排序

合肥学院计算机科学与技术系课程设计报告2017〜2018 学年第一学期课程课程设计名称学生姓名学号数据结构与算法内部排序算法比较操彦1504012027指导教师2017 年9 月1、问题分析和任务定义各种内部排序算法的时间复杂度分析结果只给出了算法执行时间的阶,或大概执行时间,存在一定的却缺陷。

我们将通过随机的数据比较各算法的关键字比较次数和关键字移动次数,以取得直观感受。

所设计的程序应能够将产生的随机数据同时用不同的内部排序算法排序,并列出关键字比较次数与移动次数,方便比较。

待排序表的表长不少于100,为方便起见,我们令表长等于100,用5组随机的数据排序的结果作比较。

2、数据结构的选择和概要设计一.可能排序表的抽象数据类型定义:ADT OrderableList {数据对象:D=個€ IntegerSet , i=1 , 2, ........... , n, n>0}数据关系:R1= { 已:| 丘:—L,机| € D,i=2, n}基本操作:Ini tList (n)操作结果:构造一个长度为n,元素值依次为1, 2, ....... , n的有序表。

Ran domizeList(d,is In verseOrder)操作结果:首先根据islnverseOrder 为True或False,将表置为逆序或正序,然后将表进行d (0< d< 8)级随机打乱。

d为0时表不打乱,d越大,打乱程度越高。

RecallList ()操作结果:恢复最后一次用Ran domizeList随机大乱的可排序表。

ListLe ngth ()操作结果:返回可排序的长度。

ListEmpty ()操作结果:若可排序表为空表,则返回True,否则返回False。

BubbleSort (&c, &s)操作结果:进行冒泡排序,返回关键字比较次数c和移动次数s。

InsertSort (&c, &s)操作结果:进行插入排序,返回关键字比较次数c和移动次数S。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档