noj大作业

noj大作业

ID:68591586

大小:16.31 KB

页数:8页

时间:2021-10-10

noj大作业_第1页
noj大作业_第2页
noj大作业_第3页
noj大作业_第4页
noj大作业_第5页
noj大作业_第6页
noj大作业_第7页
noj大作业_第8页
资源描述:

《noj大作业》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、作业名称:算法演示程序学院:航海学院班级:03011403学号:2013300951姓名:苏和团队组成:西北工业大学2021年9月30日1、问题与背景(描述程序所要解决的问题或应用背景)C语言经过几十年的发展已经发展出多种多样的的排序方法,网上的解释和代码良莠不齐,许多具有严重的错误,给学习者打来极大的不便。因此,我将目前比较流行的7种排序法:1.冒泡排序2.选择排序3.插入排序4.快速排序5堆排序6归并排序7.基数排序加以总结,标明注释,成为这个演示程序,以供交流学习使用。2、开发工具(列出所使用的开发工具和第3方开发库)Co

2、de::block3、主要功能(详细说明程序的功能)基本功能:本程序可实现对100个及以下的数据排列的功能。拓展功能:1.选择不同的排序法进行排序。2.选择数据正序排列,还是逆序排列。4、设计内容(详细描述解决问题的原理和方法、算法、数据结构等)本程序的数据变换主要在数组中进行。1.冒泡排序相邻两个记录之间进行比较和互换,使较小的记录逐渐从底部移向顶部。一次排序后最大的记录沉底,再比较前n-1个记录直到最后一次排列时只有两个记录。排列结束后最小的记录自然上浮至第一位。1.选择排序第i趟选择排序通过n-i次关键码的比较,从n-i+

3、1个记录中选出关键码最小的记录,并和记录i交换。2.插入排序把新插入记录的关键码与已排好序的逐个比较,但找到第一个比其大的记录时,该记录之前即为插入位置k。从序列最后开始到该记录,逐个后移一个单元,将新纪录插入k位置。如果新纪录比其他记录都大,则插入到最后。3.快速排序通过一趟排序将要排序的记录分为两部分,其中一部分比另一部分都要小。再按此方法对两组数据分别进行递归快速排序,从而使序列成为有序序列。4.堆排序先将初始文件R[1..n]建成一个大根堆,此堆为初始的无序区。再将关键字最大的记录R[1](即堆顶)和无序区的最后一个记录

4、R[n]交换,由此得到新的无序区R[1..n-1]和有序区R[n]。由于交换后新的根R[1]可能违反堆性质,故应将当前无序区R[1..n-1]调整为堆。然后再次将R[1..n-1]中关键字最大的记录R[1]和该区间的最后一个记录R[n-1]交换,由此得到新的无序区R[1..n-2]和有序区R[n-1..n],同样要将R[1..n-2]调整为堆,直到无序区只有一个元素为止。5.归并排序将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。首先申请空间,使其

5、大小为两个已经排序序列之和,该空间用来存放合并后的序列。设定两个指针,最初位置分别为两个已经排序序列的起始位置。比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置。重复直到某一指针超出序列尾。将另一序列剩下的所有元素直接复制到合并序列尾。6.基数排序基数排序法又称“桶子法”(bucketsort)或binsort,顾名思义,它是透过键值的部份资讯,将要排序的元素分配至某些“桶”中,藉以达到排序的作用。对数据来说,首先根据个位数的数值,在走访数值时将它们分配至编号0到9的桶子中。接下来将这些桶子中的数值

6、重新串接起来。接着再进行一次分配,这次是根据十位数来分配。接下来将这些桶子中的数值重新串接起来。重复以上过程直到最高位,这时候整个数列已经排序完毕。5、程序文件与工程名称(标出程序中所有文件名、工程名称及其说明)工程的名称:排序算法演示程序包含的程序原文件如下:1.sort.cpp主函数、输入和输出数据、显示菜单、选择排序方法2.sort_fun.cpp实现7种排序的函数3.myh.h7种排序函数及其附属函数的声明6、函数模块(程序中各个函数的原型声明及其说明)voidBubble(inta[],intn);冒泡排序voidSe

7、lection(inta[],intn);选择排序voidInsertion(inta[],intn);插入排序voidQuick(inta[],intn,intleft,intright);快速排序voidShift(inta[],inti,intm);建堆voidHeap(inta[],intn);堆排序voidMergeSort(intR[],intlow,inthigh);归并排序voidMerge(int*R,intlow,intm,inthigh);元素比较voidBucket(int*p,intn);基数排序int

8、getLoopTimes(intnum);获取数字的位数intfindMaxNum(int*p,intn);查询数组中的最大数voidsort2(int*p,intn,intloop);将数字分配到各自的桶中,然后按照桶的顺序输出排序结果7、使用说明(运行程序的

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。