[算法学习] 实现算法前的准备

这篇文章介绍实现算法前的一些个人向的准备, 准备全局的.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;
    }

你可能感兴趣的:([算法学习] 实现算法前的准备)