这篇文章介绍实现算法前的一些个人向的准备, 准备全局的.h文件, 准备测试用例的函数等. 这个系列的全部算法来自于互联网课程, 个人仅做记录使用.
type right by Thomas Alan 光风霁月023 .XDU
/define 目录的准备
将基本定义的内容放在这个目录下
common_define.h和common_include.h的准备
// common_define.h
// 这个.h的目的是将复杂的基本类型用统一的写法定义
/*
* @Description:
* @Version: 1.0
* @Autor: Thomas
* @Date: 2022-04-05 20:58:37
* @LastEditors: Thomas
* @LastEditTime: 2022-07-14 18:12:40
*/
#pragma once
typedef int TINT32;
typedef unsigned int TUINT32;
typedef signed char TINT8;
typedef unsigned char TUINT8;
typedef short TINT16;
typedef unsigned short TUINT16;
typedef __int64 TINT64;
typedef unsigned __int64 TUINT64;
// common_include.h
// 这个.h的目的是, include掉基本使用的include文件
/*
* @Description:
* @Version: 1.0
* @Autor: Thomas
* @Date: 2022-04-05 20:57:15
* @LastEditors: Thomas
* @LastEditTime: 2022-07-17 13:51:50
*/
#pragma once
#include
#include
#include
#include "common_define.h"
using namespace std;
/helper 目录的准备
这个目录存放的是助手工具
准备sort_test_helper.h文件
设置helper的空间
namespace SortTestHelper
{
...
}
准备随机数组
// 这个函数的目的是产生num个范围为rangeL~rangeR的随机数, 类型为TINT32
TINT32 *generateRandomArray(TINT32 num, TINT32 rangeL, TINT32 rangeR)
{
assert(rangeL <= rangeR);
TINT32 *arr = new TINT32[num];
srand(time(NULL));
for (TINT32 idx = 0; idx < num; idx++)
{
arr[idx] = rand() % (rangeR - rangeL + 1) + rangeL;
}
return arr;
}
// 这个函数的目的是产生顺序的num个数, 通过少量的交换得到几乎全部有次序的数组
TINT32 *generateNearlyOrderedArray(TINT32 num, TINT32 swap_times)
{
TINT32 *arr = new TINT32[num];
for (TINT32 idx = 0; idx < num; idx++)
{
arr[idx] = idx;
}
srand(time(NULL));
for (TINT32 idx = 0; idx < swap_times; idx++)
{
TINT32 posx = rand() % num;
TINT32 posy = rand() % num;
swap(arr[posx], arr[posy]);
}
return arr;
}
其他支持方法
// 这个函数的目的是判断一个长度为num的数组arr是否升序排列
template
bool isSorted(T arr[], TINT32 num)
{
for (TINT32 idx = 0; idx < num - 1; idx++)
{
if (arr[idx] > arr[idx + 1])
{
return false;
}
}
return true;
}
// 这个函数的目的是打印一个长度为num的数组arr
template
void printArray(T arr[], TINT32 num)
{
for (TINT32 idx = 0; idx < num; idx++)
{
cout << arr[idx] << " ";
}
cout << endl;
}
// 这个函数的目的是测试一个排序算法的效率和正确性
template
void testSort(string sort_name, void (*mySort)(T[], TINT32), T arr[], TINT32 num)
{
clock_t start_time = clock();
mySort(arr, num);
clock_t end_time = clock();
if (!isSorted(arr, num))
{
cout << "[Fatal] " << sort_name << " sort wrong!" << endl;
system("pause");
assert(false);
}
cout << sort_name << " : " << double(end_time - start_time) / CLOCKS_PER_SEC << " s" << endl;
}
// 这个函数的目的是深拷贝一个数组
TINT32 *copyIntArray(TINT32 arr[], TINT32 num)
{
TINT32 *new_arr = new TINT32[num];
copy(arr, arr + num, new_arr);
return new_arr;
}