美文网首页一步一步学习数据结构和算法
一步一步学习数据结构和算法(零) 排序算法辅助测试函数

一步一步学习数据结构和算法(零) 排序算法辅助测试函数

作者: mlya | 来源:发表于2019-06-13 18:15 被阅读3次

辅助测试函数

文中使用的图片来自慕课网课程算法与数据结构

本部分构建一些辅助测试函数, 用于辅助我们测试算法性能.

生成随机数组

#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(nullptr));
        for (int i = 0; i < n; i++) {
            // rand() 返回 0 到 RAND_MAX 之间的伪随机值
            // RAND_MAX 至少为 32767
            arr[i] = rand() % (rangeR - rangeL + 1) + rangeL;
        }
        return arr;
    }

    template<typename T>
    void printArray(T arr[], int n) {
        for (int i = 0; i < n; ++i) {
            cout << arr[i] << " ";
        }
        cout << endl;
        return;
    }
}

上面是两个辅助测试函数, 一个是随机生成测试数组, 一个是打印输出, 都非常简单.

生成近乎有序的数组

int *generateNearlyOrderedArray(int n, int swapTimes) {
    int *arr = new int[n];
    for (int i = 0; i < n; ++i) {
        arr[i] = i;
    }
    srand(time(nullptr));
    for (int j = 0; j < swapTimes; ++j) {
        int posx = rand() % n;
        int posy = rand() % n;
        swap(arr[posx], arr[posy]);
    }
    return arr;
}

上面代码生成一个近乎有序的数组, 通过对一个有序数组进行交换的方式生成, 其中 swapTimes 决定了交换的次数.

验证排序有效性

验证排序有效性只需要比较

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;
}

测试算法性能 (运行时长)

template<typename T>
void testSort(const 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;
}

复制数组

int *copyArray(int a[], int n) {
    int *arr = new int[n];
    copy(a, a + n, arr);
    return arr;
}

相关文章

  • 一步一步学习数据结构和算法(零) 排序算法辅助测试函数

    辅助测试函数 文中使用的图片来自慕课网课程算法与数据结构 本部分构建一些辅助测试函数, 用于辅助我们测试算法性能....

  • 算法入门教程-选择排序

    上节我们学习了常见算法的冒泡排序,本篇接着来学习选择排序算法,我们通过图解和代码的方式一步一步的来学习,首先来看什...

  • 数据结构和算法

    一。基本数据结构,排序算法,算法学习工具 基本数据结构,排序算法,算法学习工具(温馨提示:部分介绍需自备梯子) 二...

  • 常用排序算法总结

    常用排序算法 排序算法非常的多,在学习数据结构和算法时肯定都会学习到关于排序的算法,虽然现在高级语言都自带内置的排...

  • 浅谈算法和数据结构

    注:采转归档,自己学习查询使用 浅谈算法和数据结构: 一 栈和队列浅谈算法和数据结构: 二 基本排序算法浅谈算法和...

  • 排序算法-堆排序

    参考: Java排序算法(五):堆排序 【算法与数据结构】图说堆排序 【数据结构】排序算法:希尔、归并、快速、堆排...

  • Swift的十大经典排序算法总结

    Swift的十大经典排序算法总结 排序算法是《数据结构与算法》中最基本的算法之一。排序算法可以分为内部排序和外部排...

  • 选择排序算法

    选择排序(Selection Sort)算法也是比较简单的排序算法,其思路比较直观。选择排序算法在每一步中选取最小...

  • 10分钟看懂10大经典算法(Swift代码实现)

    排序算法是《数据结构与算法》中最基本的算法之一。 排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进...

  • 排序算法

    排序算法是《数据结构与算法》中最基本的算法之一。 排序算法可以分为内部排序和外部排序。 内部排序是数据记录在内存中...

网友评论

    本文标题:一步一步学习数据结构和算法(零) 排序算法辅助测试函数

    本文链接:https://www.haomeiwen.com/subject/dnhefctx.html