教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 精品文档 > 法律文档 >

江苏大学数据结构课设(C++)--多种排序算法实现(免费下载)

来源:网络收集 时间:2026-02-16
导读: 对直接插入排序、折半插入排序、冒泡排序、简单选择排序、快速排序、堆排序、归并排序算法的演示,并且输出每一趟的排序情况 数据结构课程设计报告 几种排序算法的演示 班级: 姓名: 学号: 完成日期: 一 需求分析 1.运行环境 Microsoft Visual Studio 2008

对直接插入排序、折半插入排序、冒泡排序、简单选择排序、快速排序、堆排序、归并排序算法的演示,并且输出每一趟的排序情况

数据结构课程设计报告

几种排序算法的演示

班级: 姓名: 学号: 完成日期:

一 需求分析

1.运行环境

Microsoft Visual Studio 2008 2.程序所实现的功能

对直接插入排序、折半插入排序、冒泡排序、简单选择排序、快速排序、堆排序、归并排序算法的演示,并且输出每一趟的排序情况。

3.程序的输入(包含输入的数据格式和说明)

<1>排序种类三输入 <2>排序数的个数的输入

<3>所需排序的所有数的输入 4.程序的输出(程序输出的形式)

<1>主菜单的输出

<2>每一趟排序的输出,即排序过程的输出

5.测试数据,如果程序输入的数据量比较大,需要给出测试数据。 二 设计说明

1.算法设计思想

<1>交换排序(冒泡排序、快速排序) 交换排序的基本思想是:对排序表中的数据元素按关键字进行两两比较,如果发生逆序(即排列顺序与排序后的次序正好相反),则两者交换位置,直到所有数据元素都排好序为止。

<2>插入排序(直接插入排序、折半插入排序) 插入排序的基本思想是:每一次设法把一个数据元素插入到已经排序的部分序列的合适位置,使得插入后的序列仍然是有序的。开始时建立一个初始的有序序列,它只包含一个数据元素。然后,从这个初始序列出发不断插入数据元素,直到最后一个数据元素插到有序序列后,整个排序工作就完成了。

<3>选择排序(简单选择排序、堆排序) 选择排序的基本思想是:第一趟在有n个数据元素的排序表中选出关键字最小的数据元素,然后在剩下的n-1个数据元素中再选出关键字最小(整个数据表中次小)的数据元素,依次重复,每一趟(例如第i趟,i=1,…,n-1)总是在当前剩下的n-i+1个待排序数据元素中选出关键字最小的数据元素,作为有序数据元素序列的第i个数据元素。等到第n-1趟选择结束,待排序数据元素仅剩下一个时就不用再选了,按选出的先后次序所得到的数据元素序列即为有序序列,排序即告完成。

<4>归并排序(两路归并排序) 两路归并排序的基本思想是:假设初始排序表有n个数据元素,首先把它看成是长度为1的首尾相接的n个有序子表(以后称它们为归并项),先做两两归并,得n/2上取整个长度为2的归并项(如果n为奇数,则最后一个归并项的长度为1);再做两两归并,……,如此重复,最后得到一个长度为n的有序序列。

对直接插入排序、折半插入排序、冒泡排序、简单选择排序、快速排序、堆排序、归并排序算法的演示,并且输出每一趟的排序情况

2.程序的主要流程图

3.程序的主要模块(要求对主要流程图中出现的模块进行说明) 程序的主要模块主要分为主菜单模块和排序算法演示模块。 <1>主菜单

主要功能:程序运行时,可使运行者根据提醒输入相关操作,从而进入不同的排序方法或者退出。

<2>排序方法及输出

根据运行者对排序的不同选择,进入排序过程

a.直接插入排序:根据直接排序的算法,输出排序过程 b.折半插入排序:根据折半插入的算法,输出排序过程 c.冒泡排序:根据冒泡排序算法,输出排序过程

d.简单选择排序:根据简单选择排序的算法,输出排序过程 e.快速排序:根据快速排序的算法,输出排序过程 f.堆排序:根据堆排序的算法,输出排序过程

g.归并排序:根据归并排序的算法,输出排序过程 4. 程序的主要函数及其伪代码说明 <1>模板类

主要说明程序中用到的类的定义

template<class type>class sortlist

对直接插入排序、折半插入排序、冒泡排序、简单选择排序、快速排序、堆排序、归并排序算法的演示,并且输出每一趟的排序情况

{

private: int currentsize;//数据表中数据元素的个数 public: type *arr;//存储数据元素的向量(排序表) sortlist():currentsize(0){arr=new type[maxsize];}//构造函数 sortlist(int n){arr=new type[maxsize];currentsize=n;} void insert(int i,type x){arr[i]=x;} ~sortlist(){delete []arr;}//析构函数 void swap(type &x,type &y)//数据元素x和y交换位置 {type temp=x;x=y;y=temp;} void bubblesort();//冒泡排序

void quicksort(int low,int high);//快速排序 void insertionsort();//直接插入排序 void binaryinsertsort();//折半插入排序 void selectsort();//简单选择排序 void heapsort();//堆排序

void mergesort(sortlist<type> &table);//归并排序 void filterdown(const int start);//建立最大堆

void mergepass(sortlist<type>&sourcetable,sortlist<type>&mergedtable,const int len);//一趟归并

void merge(sortlist<type>&sourcetable,sortlist<type>&mergedtable,const int left,const int mid,const int right);//两路归并算法 };

<2>直接插入排序

直接插入排序的基本思想:开始时把第一个数据元素作为初始的有序序列,然后从第二个数据元素开始依次把数据元素按关键字大小插入到已排序的部分排序表的适当位置。当插入第i(1<i<=n)个数据元素时,前面的i-1个数据元素已经排好序,这时,用第i个数据元素的关键字与前面的i-1个数据元素的关键字顺序进行比较,找到插入位置后就将第i个数据元素插入。如此进行n-1次插入,就完成了排序。 以下是在顺序表上实现的直接插入排序 在顺序表上进行直接插入排序时,当插入第i(1<i<=n)个数据元素时,前面的arr[0]、arr[1]、…、arr[i-2]已经排好序,这时,用arr[i-1]的关键字依次与arr[i-2],arr[i-3],…的关键字顺序进行比较,如果这些数据元素的关键字大于arr[i-1]的关键字,则将数据元素向后移一个位置,当找到插入位置后就将arr[i-1]插入,就完成了arr[0],arr[1],…,arr[n-1]的排序。 伪代码如下

template <class type>//直接插入排序 void sortlist<type>::insertionsort() { type temp; int j; for(int i=1;i<=currentsize-1;i++) { temp=arr[i];j=i-1;

对直接插入排序、折半插入排序、冒泡排序、简单选择排序、快速排序、堆排序、归并排序算法的演示,并且输出每一趟的排序情况

while(j>=0&&temp<arr[j]) {arr[j+1]=arr[j];j--;} arr[j+1]=temp; cout<<"第"<<++num<<"趟排序结果为:"; for(int t=0;t<currentsize;t++) cout<<arr[t]<<" "; cout<<endl; } num=0; }

<3>折半插入排序

折半插入排序的基本思想:设在排序表中有n个数据元素arr[0],arr[1],…,arr[n-1]。其中,arr[0],arr[1],…,arr[n-1]是已经排好序的部分数据元素序列,在插入arr[i]时,利用折半查找方法寻找arr[i]的插入位置。折半插入排序方法只能在顺序表存储结构实现。 伪代码如下:

template <class type>//折半插入排序 void sortlist<type>::binaryinsertsort() { type temp; …… 此处隐藏:13298字,全部文档内容请下载后查看。喜欢就下载吧 ……

江苏大学数据结构课设(C++)--多种排序算法实现(免费下载).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wendang/1418246.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)