前言:
感觉好久没写博客了,十月份的计划是:要开始深入攻克数据结构和算法,耽误好久了,这都月末了,抓紧时间又学习了一波,赶紧来分享了一下,使用的语言是C++,最开始学数据结构一定要用C,掌握扎实之后,想学算法,用C++比较好,C封装没有那么好,写起来没有那么容易了。
一、准备工作
这部分会封装一些接口,如生成数组、测试排序算法执行时间等,便于比较和调试。封装在.h中,如下:
#ifndef SORTTESTHELPER_H_ #define SORTTESTHELPER_H_ #include <iostream> #include <ctime> #include <cassert> #include <string> 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; } //生成很相近的数组 int *generateNearlyOrderedArray(int n, int swapTimes) { int *arr = new int[n]; for (int i = 0; i < n; i++) arr[i] = i; srand(time(NULL)); for (int i = 0; i < swapTimes; i++) { int posx = rand() % n; int posy = rand() % n; swap(arr[posx], arr[posy]); } return arr; } //copy一个数组 int *copyIntArray(int a[], int n) { int *arr = new int[n]; copy(a, a + n, arr); return arr; } //打印数组 template<typename T> void printArray(T arr[], int n) { for (int i = 0; i < n; i++) cout << arr[i] << " "; cout << endl; return; } //是否已排好序 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; return; } }; #endif //SORTTESTHELPER_H_