修炼算法内功:选择排序(二)

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或者留言咨询我。

不忘初心,方得始终!

猜你喜欢

转载自blog.csdn.net/Biubiuxin/article/details/81261645
今日推荐