摘要:最近在學習排序算法的時候,需要利用程序自動生成測試數(shù)據(jù),代碼和思路整理在這篇文章里面。歡迎常來設計思路因為會被很多排序算法調(diào)用,所以,數(shù)據(jù)自動生成代碼應該放在頭文件中。
最近在學習排序算法的時候,需要利用程序自動生成測試數(shù)據(jù),代碼和思路整理在這篇文章里面。
文章圖片來源于 GitHub,網(wǎng)速不佳的朋友請點我看原文。
順便軟廣一下個人技術小站:https://godbmw.com。歡迎常來 ?(^?^*)
1. 設計思路因為會被很多排序算法調(diào)用,所以,數(shù)據(jù)自動生成代碼應該放在.h頭文件中。為了防止命名沖突,函數(shù)被封裝在“命名空間”中(代碼中命名空間是: SortTestHelper)。
而對于排序來說,自動生成數(shù)據(jù)的類型需要有以下幾種:
[a, b]范圍內(nèi)的n個隨機數(shù)據(jù),比如:1、2、100、-1...
n個近乎有序的數(shù)據(jù),比如:1、2、3、7、5、6、4...
n個近乎相同的數(shù)據(jù),比如:1、1、1、2、2、2、2、2...
除此之外,還需要數(shù)組淺拷貝、打印的函數(shù),以及驗證是否排序成功和測試排序時間的函數(shù)。
2. 用的知識點srand(time(NULL)) 與 rand() : 設立隨機種子,生成隨機數(shù)
clock() : 用來算法運行前后的計算時鐘周期差值,再除以CLOCKS_PER_SEC 即為運行秒數(shù)。
函數(shù)式編程 : 使用函數(shù)指針,方便調(diào)用和測試排序函數(shù)
其中rand()函數(shù)能生成 0 到MAX_INT之間的隨機整數(shù)。如果想生成[0, n)之間的整數(shù),需要取余操作:int x = rand() % n;;如果想生成[left, right]之間的整數(shù),需要進行偏移:int x = rand() % (right - left + 1) + left;
3. 代碼實現(xiàn)// // Created by GodBMW.com on 2018/9/11. // #ifndef BASESORT_SORTHELPER_H #define BASESORT_SORTHELPER_H #include#include #include #include using namespace std; namespace SortTestHelper { // 生成[left, right]范圍內(nèi)n個隨機數(shù) template T* generateRandomArray(int n, int left, int right) { assert( left <= right ); T *arr = new T[n]; srand(time(NULL)); // set random seed for(int i = 0; i < n; i++) { arr[i] = rand() % (right - left + 1) + left; } return arr; } // 生成[0, n)范圍內(nèi)n個近乎有序的隨機數(shù) template T* generateNearlyOrderedArray(int n, int swap_times) { T *arr = new T[n]; srand(time(NULL)); // 先生成長度為n的有序數(shù)組 for(int i = 0; i < n; i++) { arr[i] = i + 1; } // 隨機選取其中2個數(shù)據(jù),交換 swap_times 次 for(int i = 0; i < swap_times; i++) { int pos_x = rand() % n; int pos_y = rand() % n; swap(arr[pos_x], arr[pos_y]); } return arr; } template T* copyArray(T arr[], int length) { T* brr = new T[length]; // 注意檢查brr數(shù)組大小 copy(arr, arr + length, brr); return brr; } template void printArray(T arr[], int length) { for(int i = 0; i < length; i++) { cout<< arr[i] << " "; } cout<< endl; return; } template bool isSorted(T arr[], int length) { for(int i = 0; i < length-1; i++) { if(arr[i] > arr[i + 1]) { return false; } } return true; } // 第三個參數(shù)是函數(shù)指針,傳入后,可以在本函數(shù)內(nèi)運行被傳入的函數(shù) template void testSort(T arr[], int length, void(*sort)(T[], int), string name) { clock_t startTime = clock(); sort(arr, length); clock_t endTime = clock(); assert(isSorted(arr, length)); cout << name << " : " << double(endTime - startTime) / CLOCKS_PER_SEC << " seconds" << endl; // endTime - startTime: 時鐘周期 return; } } #endif //BASESORT_SORTHELPER_H
我們沒有實現(xiàn)第二部分所說的 生成n個近乎相同的數(shù)據(jù),比如:1、1、1、2、2、2、2、2...。因為可以借助 generateRandomArray 函數(shù),比如:SortTestHelper::generateRandomArray(10000, 0, 10)。生成[0,10]區(qū)間內(nèi) 10000 個整數(shù),那么不就是近乎相同的嗎?
文章版權歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/8842.html
摘要:白盒測試白盒測試又稱結(jié)構(gòu)測試,透明測試,邏輯驅(qū)動測試,或基于代碼的測試。 測試分類: 一、按開發(fā)階段劃分 1、單元測試 2、集成測試 3、系統(tǒng)測試 4、驗收測試 二...
摘要:接口定義代碼角度的接口定義中的接口是一系列方法的聲明,是一些方法特征的集合,一個接口只有方法的特征沒有方法的實現(xiàn),因此這些方法可以在不同的地方被不同的類實現(xiàn),而這些實現(xiàn)可以具有不同的行為功能。 接口定義 代碼角度的接口Interface 定義:Java中的接口是一系列方法的聲明,是一些方法特征的集合,一個接口只有方法的特征沒有方法的實現(xiàn),因此這些方法可以在不同的地方被不同的類實現(xiàn),而這...
摘要:集合定義在接口自動化測試過程中將一組請求多條請求保存到一起進行集中管理。右上角有結(jié)果統(tǒng)計導出測試結(jié)果再次執(zhí)行重新發(fā)起集合執(zhí)行。 集合定義:在接口自動化測試過程中將一...
摘要:今天就說說移動測試中最重要的兩個方向。自動化測試完全不同于手游自動化測試手機和手游的開發(fā)技術不同,這導致了兩者的自動化測試技術是截然不同的。手游和的第二個玩法不同在于探索性。 隨著智能設備的普及和移動互聯(lián)網(wǎng)的興起,各家互聯(lián)網(wǎng)巨頭紛紛在往移動端布局和轉(zhuǎn)型,同時初創(chuàng)的移動互聯(lián)網(wǎng)公司也都盯著這個市場希望分一杯羹。在這個大環(huán)境下,互聯(lián)網(wǎng)的重心已經(jīng)慢慢從Web端轉(zhuǎn)向了移動端,而移動端的軟件測試也...
閱讀 1228·2021-09-26 09:46
閱讀 1582·2021-09-06 15:00
閱讀 713·2019-08-30 15:52
閱讀 1116·2019-08-29 13:10
閱讀 1277·2019-08-26 13:47
閱讀 1479·2019-08-26 13:35
閱讀 2027·2019-08-23 18:38
閱讀 721·2019-08-23 17:59