2022年多种排序算法 .pdf
《2022年多种排序算法 .pdf》由会员分享,可在线阅读,更多相关《2022年多种排序算法 .pdf(22页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、用 C+实现多种排序算法学生姓名:指导老师:摘要本课程设计是基于屏幕的简单应用程序。整数数列的排序源远流长,如何高效地排序一直困扰着我们,本程序就很好地解决了这个问题。把待排序数列存入数组中, 通过对数组的操作实现排序。在课程设计中, 系统开发平台为 Windows 2000,程序设计设计语言采用Visual C+6.0,程序运行平台为Windows 98/2000/XP/Vista。程序通过调试运行,初步实现了设计目标,并且经过适当完善后,将可以解决数学中的一些常见问题。关键词Visual C+;程序设计;排序函数;数组;1 引言1.1 课程背 景排序问题源远流长,一直是数学地重要组成部分。
2、随着各种信息的快速更新, 排序问题也走进了其他领域以及我们地日常生活。如何高效地排序一直困扰着我们1.2: 课程设计目的排序是数学的重要组成部分, 工作量大是其存在的问题。如何高效地排序?本程序就是解决这个问题而设计。程序中,把数列储存在数组中, 采用插入排序等十种排序方法对数组元素进行排序,高效地解决了排序问题。本软件开发的平台为最新的微软公司出版的市面最新系统Windows 2000,而且可以作为自身的运行平台非常广泛,包括Windows 98/2000/XP/Vista 等等。1.3课程设计内容本程序把对数列的排序转化为对数组元素的排序,用户可以根据自己的实际问题选择系统提供的十种排序方
3、法的任意一种进行排序。程序通过自身的判断以及处理实现排序。最后用户选择排序方式 (从小到大或从大到小),程序最后输出结果。如下图:输入数据存入数组选 择 排序方法排序选 择 排序方式输出结果名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 22 页 - - - - - - - - - 2 需求分析3: 系统总框图:4:模块的详细设计分析1 功能模块划分:(1) :获取数列,存入数组,选择排序方法(即主函数);(2) :调用排序函数,对数组元素进行排序;(3) :调用打印函数
4、,输出排序结果;再输入数列以及输出提示开始先 输 入 数列个数插入排序SHELL 排序二分法插入排序优化冒泡排序直接选择优化的快速排序基数排序两路归并排序输入排序方法桶式排序优化插入排序输出提示以及用户选择排序方式输出结果结束名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 22 页 - - - - - - - - - 2.模块的详细设计分析:( 1) :获取数列,存入数组和选择排序方法的模块设计分析:(控制流图)开始系 统 输出提示用户输入数据个数用 户 输 入数列输出提
5、示和用户选择排序方法程序进入下一个模块名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 22 页 - - - - - - - - - (数据流图)注:(2) :调用排序函数和对数组元素进行排序的模块设计分析:输入待排序数据个数,存入变量 n 中输入数列系统输出提示信息用户输入排序方法对应的数字,其存入变量 sign 中把数列存入数组array20 程序进入下一个模块名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - -
6、- 名师精心整理 - - - - - - - 第 4 页,共 22 页 - - - - - - - - - (控制流图)判 断 所 选择 的 排 序方法上一个模块插入排 序函数进行排序优化插 入排序函数 进行排序二分法 插入排序函 数进行排序优化冒 泡函数进行排序直接选 择函数进行排序SHELL 排序函数进 行排序优化的 快速排序函 数进行排序两路归 并排序函数 进行排序桶式排 序函数进行排序基 数 排序 函数进行排序十种排序函数中选一种十种排序函数中选一种排 序完 成,返 回主 函数程 序进 入下一个模块名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - -
7、 - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 22 页 - - - - - - - - - (数据流图)下面重点分析排序函数: A:插入排序的流程图如下:注: 该排序是把待排序数插入已排好的数列中,从第一个元素开始到第n-1 个元素(数组以第 0 元素开始计)B: 优化插入排序的流程图如下:上一个模块判断 sign的值实 参 是数组array20和 部 分变量如变量 n 程序流向对应的排序函 数对数组元 素进行排序排 序 完成 , 程序 流 向下 一 个模块取 出 数组 第i个元素(i0)与第 i-1 个元素比较判断大小调用交换函数,把两个值对调, i自减
8、,直到i=0 i 自增, 直到in,(n元 素 个数) 前者小前者大名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 22 页 - - - - - - - - - :注 :该排序是把待排序数插入已排好的数列中,从第一个元素开始到第n-1 个元素(数组以第 0 元素开始计) ,对第一种进行适当的修改,提高了运行效率。C:以下配合原代码对二分法插入排序进行说明:void BinaryInsertSorter(int Array,int n) /形参接受数组,n 代表元素个数 i
9、nt temp; int left,right,middle; /分别表示左右中的数for(int i=1;in;i+) /从第一元素开始插入 temp=Arrayi; /待插入数赋给temp left=0;right=i-1; while(left=right) middle=(left+right)/2; if(temp=left;j-) /实现插入并移动部分元素Arrayj+1=Arrayj; Arrayleft=temp; 注 :通过二分法大大缩小查找范围,该方法适合对大量数据的排序。D: 下面配合源代码对优化冒泡排序进行说明:void ImprovedBubbleSorter(int
10、 Array,int n) /形参接受数组,n 代表元素个数 bool NoSwap; /表示需不需交换for(int i=1;i=i;j-) if(Arrayj,Arrayj-1) swap(Array,j,j-1); NoSwap=false; if(NoSwap) return; E: 下面配合源代码对直接选择排序:void StraighSelectSorter(int Array,int n) /形参接受数组,n 代表元素个数for(int i=0;in-1;i+) /从第 0 个元素开始选择,依次选择较小数 int Smallest=i; for(int j=i+1;jn;j+)
11、/在未排序元素中循环,Smallest 计下最小元素的下标 if(ArrayjArraySmallest) Smallest=j; swap(Array,i,Smallest); / 交换两元素的值 F:下面结合源代码对Shell 排序进行说明:void ModifiedInsertSort(int Array,int n,int delta) for(int i=delta;i=delta;j-=delta) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 22 页 -
12、 - - - - - - - - if(Arrayj0;delta/=2) for(int j=0;jdelta;j+) ModifiedInsertSort(&Arrayj,n-j,delta); /调用,实现排序 J:下面结合源代码对桶式排序进行说明:void BuckerSorter(int Array,int n,int max) /接受数组,以及最大数max int *TempArray=new intn; /建立动态指针int * count=new intmax; /建立动态指针int i; for(i=0;in;i+) TempArrayi=Arrayi; / 把数组 Arra
13、y 赋给诉诸 TempArray for(i=0;imax;i+) counti=0; for(i=0;in;i+) countArrayi+; / countArrayi 表示数值Arrayi 出现的次数for(i=1;i=0;i-) Array-countTempArrayi=TempArrayi; /“对号入座” ,实现排序,(3) :调用打印函数和输出排序结果的模块设计:上一个模块主 函 数调 用 打印函数用 户 输入 何 种排 序 方式判 断 排序方式按 照 从小 大 输出按 照 从大 到 小输出结束名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - -
14、 - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 22 页 - - - - - - - - - (控制流图)(数据流图)5:源代码中使用的函数及其说明void swap(int Array,int i,int j): 交换数组 Array 第 i 和 j 个元素的值,程序中需调用多次;void InsertSort(int Array,int n) :插入排序函数,把待排序元素插入已排序的数列中,最终实现排序;void ImprovedInertSorter(int Array,int n) :优化插入排序函数,;上一个模块输出提示信息用户输入排序方式对应
15、的数字程 序 把 该 数 字 存入变量 j 中判断 j的值j=1 按 元 素 次序 从 小 到大 把 数 组array 输出按 元 素 次序 从 大 到小 把 数 组array 输出结束j=2 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 22 页 - - - - - - - - - void BinaryInsertSorter(int Array,int n):二分法插入排序函数;void ImprovedBubbleSorter(int Array,int n)
16、:优化冒泡排序函数;void StraighSelectSorter(int Array,int n) :直接选择排序函数;void ModifiedInsertSort(int Array,int n,int delta):SHELL 排序函数;int SelectPivot(int left,int right) :在优化的快速排序函数调用此函数,求中值;int Partition(int Array,int left,int right) :在优化的快速排序函数调用此函数;void ImprovedQuickSorter(int Array,int left,int right):优化的
17、快速排序函数;void Merge(int Array,int TempArray,int left,int right,int middle) :两路归并排序函数;void BuckerSorter(int Array,int n,int max):桶式排序函数;void RadixSorter(int Array,int n,int d,int r): 基数排序函数;void printArray(int Array,int n) :打印函数,即输出结果;注:以上均为外部函数。6:源代码中的算法举例以优化插入排序为例:源代码如下: /优化插入排序void ImprovedInertSort
18、er(int Array,int n) int Temp; for(int i=1;i=0)&(TempArrayj) Arrayj+1=Arrayj; j=j-1; Arrayj+1=Temp; 该排序是把待排序数插入已排好的数列中,从第一个元素开始到第n-1 个元素(数组以第0元素开始计)其流程图如下:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 22 页 - - - - - - - - - 7、存在的问题与不足及对策(1) :系统仅提供整数排序, 当数列中有浮点
19、型等数据类型时,系统不能保证排序结果正确,对策:排序数列仅输入整数;(2) :程序无异常处理机制。对策:用户使用时严格按照系统提示,可保证运行结果正确;8 、操作手册下面结合每一次输入后的界面情况进行说明。(1) :系统输出提示信息, 用户输入待排序数列的长度,即数据个数; 如下图(系统初始界面)Temp 与第 j个 元 素 比较,j 的初始值是 i-1 取出数组第 i 个元素,赋给变量Temp 判 断 大小当 j 不小于 0 时 j自减,并且把第j个 元 素 的 值 赋 给第 j+1 个元素前者小前者大把 Temp 赋给第j+1 个元素,并且i 自加直到 i=n-1(n 为元素个数)名师资料
20、总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 22 页 - - - - - - - - - (以 6 为数列长度为例)(2) :系统输出提示信息,用户输入数列,长度一定不能错;如下图(以该数列为例)(3) :系统输出提示信息, 用户根据实际情况选择适当的排序方法;如下图(以插入排序为例)(4) :系统输出提示信息,用户选择排序方式,输出结果,程序结束;如下图名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年多种排序算法 2022 多种 排序 算法
限制150内