排序算法设计与分析实践报告
内容与设计思想
1.设计一个数据生成器,输入参数包括N, s, t, T;可随机生成一个大小为N、数值范围在[s, t]之间、类型为T的数据集合;T包括三种类型(顺序递增、顺序递减、随机取值)
2.编程实现merge sort算法和insertion sort算法。(以下测试都使用第1步的数据生成器)
3.对于顺序递增类型的数据集合而言,在不同数据规模情况下(数据规模为10^2, 10^3, 10^4, 10^5)下,两种算法的运行时间各是多少?
4.对于顺序递减类型的数据集合而言,在不同数据规模情况下(数据规模为10^2, 10^3, 10^4, 10 ^5)下,两种算法的运行时间各是多少?
5.对于随机取值类型的数据集合而言,在不同数据规模情况下(数据规模为10^2, 10^3, 10^4, 10 ^5)下,两种算法的运行时间各是多少?
6.补充题:编程实现bubble sort 算法,并与上面两个算法进行对比。
设计思路
- 考虑到完成整个实验需要划分几个部分:数据生成器(通过random随机数组实现)、时间测试函数、mergesort算法、insertionsort算法、bubblesort算法 及 基本的输入输出。
- 为保证变量的单一性,将每一次实验生成的随机数组写入一txt文件中,再由三种算法从文件读入,比较测试所用时间。
- 确定将数据生成器写作头文件function.h,主要程序及排序算法保存在一cpp文件,一个data.txt文件保留数据。
数据生成器源码(function.h)
#include<fstream>
#include<iostream>
using namespace std;
#include<vector>
#include<stdlib.h>
void func(int N,int s,int t,int T)
{
srand((unsigned int)time(NULL));
vector<int> a;
for (int i = 0; i < N; i++)
{
a.push_back(rand() % (t - s + 1) + s);
}
switch (T)
{
case 1: //若传入T为1,生成顺序递增类型
sort(a.begin(), a.end());
break;
case 2: //若传入T为2,生成顺序递减类型
sort(a.begin(), a.end());
reverse(a.begin(), a.end());
break;
default: //若其他(传入3),生成随机类型
break