(完整word版)数据结构实验八:快速排序(word文档良心出品).doc

(完整word版)数据结构实验八:快速排序(word文档良心出品).doc

  1. 1、本文档共18页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

HUNANUNIVERSITY

课程实验报告

题目:快速排序

学生姓名

学生学号

专业班级

指导老师 李晓鸿

完成日期 2015年1月7日

一、需求分析

1.程序的功能

由用户输入任务件数和任务时间,使用快速排序,输出使得所有任务等待时间最小的序列。

2.输入的形式

本程序由用户输入任务总数以及每个任务所花时间,中间用空格或换行隔开,任务总数必须为正整数。

请输入任务总数:

请输入各个任务所花时间:

3.输出形式

在对这些任务所花时间进行快速排序后,将这些数据从小到大输出任务时间。

任务所花时间的排序如下:

4.测试数据

1.请输入任务总数:

9

请输入各个任务所花时间:

534261573

任务所花时间从小到大的排序如下:

123345567

请输入任务总数:

10

请输入各个任务所花时间:

6512354861

任务所花时间从小到大的排序如下:

1123455668

请输入任务总数:

6

请输入各个任务所花时间:

10101945235

任务所花时间从小到大的排序如下:

51010192345

请输入任务总数:

8

请输入各个任务所花时间:

87654321

任务所花时间从小到大的排序如下:

12345678

请输入任务总数:

10

请输入各个任务所花时间:

24681012142615

任务所花时间从小到大的排序如下:

01246812141526

二、概要设计

1.抽象数据类型

将每一个元素储存在一个有序并且有限的序列中,每一个元素都有一个自己的位置,也都有一个数据类型,所以使用线性表来储存各个任务所花的时间。

ADT

ADTalist

{

数据对象:定义线性表的最大储存元素maxsize;

当前储存元素数listsize;

数据关系:若listsize=0,则线性表没有元素,为空;

基本操作:alist(intn)//构造函数

~alist()//析构函数

boolappend(inta)//增加元素

}

3.算法的基本思想

设要排序的线性表中元素是A[0]……A[N-1],首先通过时间函数余作为关键数据piot,然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,通过前后指针的移动,实现快速排序。再将piot值左右两边的线性表进行快速排序,直到需要快速排序的线性表只有1个元素。

4.程序基本流程

程序分为三个模块:

输入模块:由用户读入任务总数n以及各个任务所花时间;

排序模块:对这些时间进行快速排序;

输出模块:输出排序后的序列。

三.详细设计

1.物理数据类型

由于线性表长度已知,并且进行大量的交换操作,所以使用顺序表来实现。

顺序表的伪代码

classalist

{

public:

intmaxsize;

intlistsize;

int*listarry;

alist(intn)

{

maxsize=n;

listsize=0;

listarry=newint[maxsize];

}

~alist()

{

delete[]listarry;

}

boolappend(inta)

{

if(listsize==maxsize)returnfalse;

listarry[listsize++]=a;

returntrue;

}};

详细设计

获取piot值——partation——quicksort

获取piot值:获取随机数,通过随机数获得piot值。为了防止随机数大于所有数,对随机数就行求余,对求余后的值加1(防止左边界为0,右边界为1的情况,(r+l)/2==0).

intfindpiot(inta,intb)

{

srand(time(0));

intn=rand()%((a+b)/2+1);

returnn;

}

partation(划分):开始参数l.r紧挨要分割子线性表的实际

您可能关注的文档

文档评论(0)

177****7979 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档