随机生成测试用例(以当前时间为随机种子)
在学习排序算法的过程中,特别是对比不同排序算法之间以及同一排序算法的优化之间的效率时,需要用到大量的测试用例,采取硬编码的方式难以满足测试需要,故采用随机生成测试用例的方式。
【思想】:将当前时间设置为随机种子,在给定的随机数范围[rangeL, rangeR]内生成随机数,此处选择用rand()对整个随机范围取余,再加上偏移量的方式。
【代码】:
SortTestHelper.h:
#pragmaonce
#ifndef SELECTIONSORT_SORTTESTHELPER_H
#defineSELECTIONSORT_SORTTESTHELPER_H
#include<iostream>
#include<ctime>
#include<cassert>
usingnamespace std;
//把测试相关的函数放到新的命名空间里
namespace SortTestHelper {
//返回一个随机生成的数组(测试暂定义为int*类型)
//生成有n个元素的随机数组,每个元素的范围为[rangeL, rangeR]
int*generateRandomArray(intn, intrangeL, intrangeR){
assert(rangeL <= rangeR);//确保左端点<=右端点
int *arr = newint[n];
srand(time(NULL));//将当前时间设置为随机种子
for (int i = 0; i < n; i++)
arr[i]= rand() % (rangeR - rangeL + 1) + rangeL;
//rand()对整个范围取余,再加上偏移量
return arr;
}
}
#endif
main:
// SelectionSort.cpp: 定义控制台应用程序的入口点。
//
#include"stdafx.h"
#include<iostream>
#include<algorithm>
#include<string>
#include"Student.h"
#include"SortTestHelper.h"
usingnamespace std;
//泛型
template<typenameT>
voidselectionSort(Tarr[], intn) {
for (int i = 0; i < n; i++) {
//寻找(i, n)区间中的最小值及其所在位置
int minIndex = i;//每次默认未排序部分的第一个为最小值
for (int j = i + 1; j < n; j++)
if (arr[j] < arr[minIndex])
minIndex= j;
//交换
swap(arr[i], arr[minIndex]);//老版中swap函数在algorithm库
}
}
//打印函数
template<typenameT>
voidprintArray(Tarr[], intn) {
for (int i = 0; i < n; i++)
cout<< arr[i]<< " ";
cout<< endl;
}
int main()
{
int n = 10000;//随机数组的长度
int *arr =SortTestHelper::generateRandomArray(n, 0, n);
selectionSort(arr,n);
printArray(arr,n);
//在SortTestHelper中使用了new开辟了新的命名空间,此处释放,避免内存泄漏
delete[] arr;//arr开的是数组空间,故用该方法释放
return 0;
}
【运行截图】:以下为首、尾截图(10000个在[0, 10000]范围内的随机数经选择排序selectionSort后的结果)