4、随机生成算法测试用例
后面在比较不同排序算法效率的时候,可能会用到一万、十万、百万这种量级的数组,对于这种数组,不能手动生成。为此写一个新的方法生成随机数组,以及其他测试相关的辅助方法。
命名空间的使用:
头文件——SortTestHelper.h
命名空间——namespace+空间名+{程序块}
代码块6:
#ifndef INC_03_SELECTION_SORT_GENERATE_TEST_CASES_SORTTESTHELPER_H
#define INC_03_SELECTION_SORT_GENERATE_TEST_CASES_SORTTESTHELPER_H
#include <iostream>
#include <ctime>
#include <cassert>
using namespace std;
namespace SortTestHelper {
// 生成有n个元素的随机数组,每个元素的随机范围为[rangeL, rangeR]
int* generateRandomArray(int n, int rangeL, int rangeR) {
assert(rangeL <= rangeR);
int* arr = new int[n];
srand(time(NULL));// 设置随机种子
for (int i = 0; i < n; i++)
arr[i] = rand() % (rangeR - rangeL + 1) + rangeL;
return arr;
}
// 打印arr数组的所有内容
template<typename T>
void printArray(T arr[],int n){
for (int i=0; i < n; i++)
cout << arr[i] << " ";
cout << endl;
return;
}
};
#endif //INC_03_SELECTION_SORT_GENERATE_TEST_CASES_SORTTESTHELPER_H
函数调用——>空间名+::
SortTestHelper::generateRandomArray(n,0,n);
代码块7:
int main()
{
int n = 10000;
int *arr = SortTestHelper::generateRandomArray(n,0,n);
selectionSort(arr, n);
SortTestHelper::printArray(arr,n);
delete[] arr;//释放new申请的数组内存
system("pause");
return 0;
}
运行结果十分庞大,我就不做展示了。是1~10000的随机生成的数,且排序正确。
5、测试算法的性能
(1)、排序算法性能测试
测试方法为——>void timeTestSort(参数);
参数为——>
- 数组名——string sortName,
- 数组指针——void(*sort)(T[],int),
- 数组和传入个数——T arr[],int n
实现算法:使用clock函数测试与打印。
代码块8:
void timeTestSort(string sortName, void(*sort)(T[], int), T arr[], int n)
{
clock_t startTime = clock();
sort(arr, n);
clock_t endTime = clock();
assert(isSorted(arr,n));//放在测试时间函数之后,此程序也会占用测试时间,使测试结果不正确。
cout << sortName << ":" << double(endTime - startTime)
/ CLOCKS_PER_SEC << "s" << endl;
return;
}
(2)、验证函数排序的正确性
代码块9:
template<typename T>
bool isSorted(T arr[],int n)
{
for (int i = 0; i < n-1; i++) {
if (arr[i] > arr[i + 1])
return false;
}
return true;
}
运行与测试:
n=10000 结果如下:
n=100000 结果如下:
ps:基础排序中的选择排序以及相关知识就说到这里了,如果想了解更多可以关注我的博客Biubiuxin或者留言咨询我。
不忘初心,方得始终!