本科实验报告
课程名称: 算法设计与分析
实验项目: 算法设计与分析实验
实验地点: 致远楼403
专业班级: 学号:
学生姓名:
指导教师:
2017年 3 月 28日
实验一 分治法合并排序
一、实验目的
2。掌握合并排序的实现方法
4.学会用分治法解决实际问题
二、实验内容
随机产生一个整型数组,然后用合并排序将该数组做升序排列,要求输出排序前和排序后的数组。
三、实验环境
程序设计语言:c++
编程工具:microsoft visual studio 2013
四、程序代码
#include ”stdafx.h"
#include<iostream〉
#include〈cassert〉
#include””
using namespace std;
template〈typename T>
void mergeSort(T arr[],int n)
{_mergeSort(arr,0,n-1);}
template〈typename T〉
void __mergeSort(T arr[],int l,int r)
{
if(l>=r)
return;
ﻩint mid=(l+r)/2;
ﻩ__mergeSort(arr,l,mid);
ﻩ__mergeSort(arr,mid+1,r);
if(arr[mid]〉arr[mid+1])
ﻩ __merge(arr,l,mid,r);
}
template〈typename T>
void __merge(T arr[],int l,int mid,int r)
{
ﻩT *aux=new T[r-l+1];
ﻩfor(int i=l;i<=r;i++)
ﻩﻩaux[i-l]=arr[i];
int i=l,j=mid+1;
ﻩfor(int k=l;k<=r;k++)
{
if(i>mid)
ﻩﻩ{
ﻩ arr[k]=aux[j-l];
ﻩj++;
ﻩﻩ}
ﻩelse if(j〉r)
{
ﻩ arr[k]=aux[i-l];
ﻩi++;
ﻩ }
else if(aux[i—l]〈aux[j-l])
ﻩ {
arr[k]=aux[i-l];
ﻩﻩﻩi++;
ﻩ }
ﻩﻩelse{
ﻩﻩﻩarr[k]=aux[j-l];
ﻩ ﻩj++;
}
}
ﻩdelete[] aux;
}
int _tmain(int argc, _TCHAR* argv[])
{
int n=10;
ﻩint *arr=SortTestHelper::generateRandomArray(n,0,n);
cout<<”未排序的数组为:";
ﻩfor(int j=0;j〈10;j++)
ﻩ cout<<arr[j]<<" ";
ﻩcout〈〈endl;
ﻩmergeSort(arr,10);
ﻩcout〈<”经过排序的数组为:";
for(int i=0;i〈9;i++)
ﻩﻩcout〈<arr[i]<<” ”;
cout〈〈endl;
}
#include""
#include〈iostream>
#include<ctime〉
#include<cassert>
using namespace std;
namespace SortTestHelper{
int *generateRandomArray(int n,int randL,int randR)
{
ﻩassert(randL<=randR);
ﻩint *arr=new int[n];
ﻩfor(int i=0;i<n;i++)
ﻩ arr[i]=rand()%(randR-randL+1)+randL;
ﻩreturn arr;
}
}
五、实验结果截图
六、实验总结
一定要先找到递归函数式后,设计递归程序
太原理工大学算法实验报告 来自淘豆网m.daumloan.com转载请标明出处.