算法设计与分析实验报告 模板.docx

上传人:b****2 文档编号:24324679 上传时间:2023-05-26 格式:DOCX 页数:7 大小:16.27KB
下载 相关 举报
算法设计与分析实验报告 模板.docx_第1页
第1页 / 共7页
算法设计与分析实验报告 模板.docx_第2页
第2页 / 共7页
算法设计与分析实验报告 模板.docx_第3页
第3页 / 共7页
算法设计与分析实验报告 模板.docx_第4页
第4页 / 共7页
算法设计与分析实验报告 模板.docx_第5页
第5页 / 共7页
点击查看更多>>
下载资源
资源描述

算法设计与分析实验报告 模板.docx

《算法设计与分析实验报告 模板.docx》由会员分享,可在线阅读,更多相关《算法设计与分析实验报告 模板.docx(7页珍藏版)》请在冰豆网上搜索。

算法设计与分析实验报告 模板.docx

算法设计与分析实验报告模板

实验报告

(2016/2017学年第一学期)

课程名称

算法分析与设计

实验名称

分治策略

实验时间

2016

10

18

指导单位

计算机学院软件教学中心

指导教师

季一木

学生姓名

周文超

班级学号

B14041527

学院(系)

计算机学院、软件学院

专业

软件工程

实验报告

实验名称

分治策略

指导教师

季一木

实验类型

验证

实验学时

2

实验时间

一、实验目的和任务

1.理解分治法的算法思想,阅读实现书上已有的部分程序代码并完善程序,加深对分治法的算法原理及实现过程的理解。

2.用分治法实现一组无序序列的两路合并排序和快速排序。

要求清楚合并排序及快速排序的基本原理,编程实现分别用这两种方法将输入的一组无序序列排序为有序序列后输出。

二、实验环境(实验设备)

算法设计与分析课本

笔记本电脑

VC++6.0

三、实验原理及内容(包括操作过程、结果分析等)

实验原理

运用分治法:

无序->部分有序->整体有序

归并排序中“分”与“合”的过程是结合在一起的,即每一趟都在做“分”与“合”的工作,并不是先“分”完再“合”

基本程序

(一)两路合并排序

#include

classSortableList{

public:

SortableList(intmSize)//构造函数

{

maxSize=mSize;

l=newint[maxSize];

n=0;

}

~SortableList(){delete[]l;}//析构函数

voidInput();

voidMerge(intleft,intmid,intright);

voidMergeSort();

voidMergeSort(intleft,intright);

voidOutput();

private:

int*l;//动态生成一维数组

intmaxSize;//线性表的最大表长

intn;//线性表的实际长度

};

voidSortableList:

:

Input(){

for(inti=0;i

cin>>l[i];

n++;

}

}

voidSortableList:

:

Merge(intleft,intmid,intright){

int*temp=newint[right-left+1];

inti=left,j=mid+1,k=0;

while((i<=mid)&&(j<=right))

if(l[i]<=l[j])

temp[k++]=l[i++];

else

temp[k++]=l[j++];

while(i<=mid)

temp[k++]=l[i++];

while(j<=right)

temp[k++]=l[j++];

for(i=0,k=left;k<=right;)

l[k++]=temp[i++];

}

voidSortableList:

:

MergeSort(){

MergeSort(0,n-1);

}

voidSortableList:

:

MergeSort(intleft,intright){

if(left

intmid=(left+right)/2;//将待排序的序列一分为二

MergeSort(left,mid);//对左序列排序

MergeSort(mid+1,right);//对右序列排序

Merge(left,mid,right);//将两个有序子序列合并成一个有序序列

}

}

voidSortableList:

:

Output(){

for(inti=0;i

cout<

}

}

voidmain(){

SortableListl(10);

cout<<"请输入10个数:

"<

l.Input();

l.MergeSort();

cout<<"排序后是:

"<

l.Output();

}

(二)快速排序

#include

classSortableList{

public:

SortableList(intmSize)//构造函数

{

maxSize=mSize;

l=newint[maxSize];

n=0;

}

~SortableList(){delete[]l;}//析构函数

voidInput();

voidSwap(inti,intj);

intPartition(intleft,intright);

voidQuickSort(intleft,intright);

voidQuickSort();

voidOutput();

private:

int*l;//动态生成一维数组

intmaxSize;//线性表的最大表长

intn;//线性表的实际长度

};

voidSortableList:

:

Input(){

for(inti=0;i

cin>>l[i];

n++;

}

}

voidSortableList:

:

Swap(inti,intj){

intc=l[i];

l[i]=l[j];

l[j]=c;

}

intSortableList:

:

Partition(intleft,intright){

//前置条件:

left<=right

inti=left,j=right+1;

do{

doi++;while(l[i]

doj--;while(l[j]>l[left]);

if(i

}while(i

Swap(left,j);

returnj;

}

voidSortableList:

:

QuickSort(){

QuickSort(0,n-1);

}

voidSortableList:

:

QuickSort(intleft,intright){

if(left

intj=Partition(left,right);//对[left,right]范围内的序列进行分划

QuickSort(left,j-1);//对左子序列实施快速排序

QuickSort(j+1,right);//对右子序列实施快速排序

}

}

voidSortableList:

:

Output(){

for(inti=0;i

cout<

}

}

voidmain(){

SortableListl(10);

cout<<"请输入10个数:

"<

l.Input();

l.QuickSort();

cout<<"排序后是:

"<

l.Output();

}

实验结果

两路合并排序

快速排序

六、实验小结(包括问题和解决方法、心得体会等)

合并排序的基本运算是把两个或多个有序序列合并成一个有序序列。

快速排序又称分划交换排序,分别将两个子序列拍成有序序列,则整个序列也就成了有序序列。

首先要掌握基本的排序思想,然后把逻辑语言转化成程序语言,参考网上的各种答案优化自己的算法程序结合所学知识。

七、指导教师评语

成绩

批阅人

日期

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

当前位置:首页 > IT计算机 > 电脑基础知识

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

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