推荐下载快速排序算法实验报告word范文模板 17页文档格式.docx

上传人:b****3 文档编号:15756573 上传时间:2022-11-15 格式:DOCX 页数:14 大小:20.41KB
下载 相关 举报
推荐下载快速排序算法实验报告word范文模板 17页文档格式.docx_第1页
第1页 / 共14页
推荐下载快速排序算法实验报告word范文模板 17页文档格式.docx_第2页
第2页 / 共14页
推荐下载快速排序算法实验报告word范文模板 17页文档格式.docx_第3页
第3页 / 共14页
推荐下载快速排序算法实验报告word范文模板 17页文档格式.docx_第4页
第4页 / 共14页
推荐下载快速排序算法实验报告word范文模板 17页文档格式.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

推荐下载快速排序算法实验报告word范文模板 17页文档格式.docx

《推荐下载快速排序算法实验报告word范文模板 17页文档格式.docx》由会员分享,可在线阅读,更多相关《推荐下载快速排序算法实验报告word范文模板 17页文档格式.docx(14页珍藏版)》请在冰豆网上搜索。

推荐下载快速排序算法实验报告word范文模板 17页文档格式.docx

输出:

输出有n行,每行一个正整数,从第一行到最后一行依次代表着操作系统要处理的任务所用的时间。

按此顺序进行,则使得所有任务等待时间最小。

4.测试数据:

输入

9

534261573输出

123345567

三、概要设计

抽象数据类型

因为此题不需要存储复杂的信息,故只需一个整型数组就可以了。

算法的基本思想

对一个给定的进行快速排序,首先需要选择一个轴值,假设输入的数组中有k个小于轴值的数,于是这些数被放在数组最左边的k个位置上,而大于周知的结点被放在数组右边的n-k个位置上。

k也是轴值的下标。

这样k把数组分成了两个子数组。

分别对两个子数组,进行类似的操作,便能得到正确的排序结果。

程序的流程

输入事件件数n-->

随机产生做完没个事件

所需时间-->

对n个时间进行排序-->

输出结果

快速排序方法(因图难画,举一个实例):

初始状态72657888542lr第一趟循环72657888542lr第一次交换67257888542lr第二趟循环67257888542rl第二次交换72657888542rl

反转交换67257888542rl

这就是依靠轴值,将数组分成两部分的实例(特殊情况下,可能为一部分,其中42是轴值)。

对分成的两部分数组,分别尽心类似的操作,便可得符合要求的结果。

快速排序的函数模块;

voidqsort(int*array,intl,intr){

if(r<

=l)return;

intpivotIndex=l+rand()%(r-l+1);

//随机选定轴值

swap1(array,pivotIndex,r);

//将选定的轴值放到每段数组的最后intk=partition(array,l-1,r,array[r]);

//依靠轴值,将数组分//成两部分

swap1(array,k,r);

//将轴值放到正确的位置上

qsort(array,l,k-1);

//递归调用,对数组左右两部分进行排序qsort(array,k+1,r);

}

/*将大于轴值的放右边,小于轴值的放左边算法实现*/intpartition(int*array,intl,intr,constintpivot){

do{

while(array[++l]<

pivot);

while((r!

=0)&

&

(array[--r]>

pivot));

swap1(array,l,r);

}while(l<

r);

}

swap1(array,l,r);

returnl;

算法的时空分析

快速排序在最差情况下,时间代价为Θ(n2),但很少出现这种情况。

如果快速排序找到了完美的轴值,那么整个算法的时间代价为Θ(n㏒n)。

输入和输出的格式

输入

n=//提示等待输入输出

原始序列:

//提示随机产生的n个随机数结果:

//提示正确的排序结果

四、测试结果

五、实验心得(可选)

这个实验,不难。

但是关键在于理解快速排序的那个过程,如何根据轴值将数组分成两部分,然后将轴值放到合适的位置,继续对分成两部分的数组,执行类似的操作。

六、附录(实验源码)

#include<

iostream>

#include<

ctime>

usingnamespacestd;

//产生n个随机数,存储到数组int*crtArray(int&

size){intn;

cout<

<

"

n="

;

cin>

>

n;

//设置随机种子

srand(time(NULL));

int*intArray=newint[n];

size=n;

cout<

"

<

endl;

for(inti=0;

i<

n;

i++){

intArray[i]=rand()%10;

if(intArray[i]==0){i--;

continue;

}cout<

intArray[i]<

returnintArray;

//交换数组中的两个值

voidswap1(int*array,int&

a,int&

b){inttemp=array[a];

array[a]=array[b];

array[b]=temp;

//对指定的数组部分进行分割

intpartition(int*array,intl,intr,constintpivot){do{while(array[++l]<

=pivot));

}while(l<

//快速排序的实现部分

voidqsort(int*array,intl,intr){if(r<

intpivotIndex=r;

intk=partition(array,l-1,r,array[r]);

swap1(array,k,r);

qsort(array,l,k-1);

qsort(array,k+1,r);

/*主函数*/intmain(){intsize;

int*Array;

Array=crtArray(size);

qsort(Array,0,size-1);

结果:

size;

i++)cout<

Array[i]<

return0;

}

篇二:

数据结构实验八快速排序实验报告

数据结构实验课程最终报告

题目:

实验八快速排序

专业班级:

计算机科学与技术

姓名:

XXX

学号:

指导老师:

李晓鸿

完成日期:

201X.01.06

一、需求分析

背景

排序是计算机内经常进行的一种操作,其目的是将一组“无序”的记录序列调整为“有序”的记录序列。

假设含n个记录的序列为{R1,R2,?

,Rn}

其相应的关键字序列为{K1,K2,?

,Kn}

这些关键字相互之间可以进行比较,即在它们之间存在着这样一个关系:

Kp1≤Kp2≤?

≤Kpn

按此固有关系将上式记录序列重新排列为{Rp1,Rp2,?

,Rpn}的操作称作排序。

排序算法是计算机科学中最重要的研究问题之一。

对于排序的研究既有理论上的重要意义,又有实际应用价值。

它在计算机图形、计算机辅助设计、机器人、模式识别、及统计学等领域具有广泛应用。

常见的排序算法有起泡排序、直接插入排序、简单选择排序、快速排序、堆排序等。

例1:

有时候应用程序本身就需要对信息进行排序。

为了准备客户账目,银行需要根据支票的号码对支票排序;

例2:

在一个绘制互相重叠的图形对象的程序中,可能需要根据一个“在上方”关系将各对象排序,以便自下而上地绘出对象。

例3:

在一个由n个数构成的集合上,求集合中第i小/大的数。

例4:

对一个含有n个元数的集合,求解中位数、k分位数。

1.问题描述

2.程序要求实现的功能

当有n件任务同时来临时,每件任务需要用时ni,求出让所有任务等待的时间和最小的任务处理顺序。

3.输入输出要求

a)输入要求:

b)输出要求:

4.测试数据

1.输入:

请输入任务件数:

-1

输出:

输入有误,请重新输入!

2.输入:

4

请输入各任务所需时间:

2430

3.输入:

2436

任务执行的先后顺序为:

2

3

6

4.输入:

534261573

1

5

7

二、概要设计

(一)函数调用关系图

int

intPartition(int

start,intrandom(intstart,intend);

voidchange(int

a[],inti,intj);

a[],int主

函数voidQuickSort(inta[],intend);

start,intend);

void

QuickSort(inta[],intstart,int

end);

三、详细设计

(一)物理数据类型

本程序所输入的任务件数和任务时间均为整数,可使用整数int实现数据的存储。

使用数组实现快速排序。

(二)具体步骤和伪代码

1.输入任务件数及任务时长

while

(1)

{

cout<

请输入任务件数:

cin>

while(size)//任务件数大于0,则执行该循环,否则重新输入件数{

inti;

请输入各任务所需时间:

for(i=0;

i++)

a[i];

if(a[i]<

=0)

endl;

break;

if(i==size)

2.调用函数取随机轴值

intrandom(intstart,intend)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 高中教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1