演算法效率測試 以排序演算法為例

2021-08-03 20:37:56 字數 2793 閱讀 6722

慕課網學習了一段時間後,覺得可以了,借鑑講師們說的和自己的經驗,總結下如何測試乙個程式**的效率和開銷問題。

排序演算法為例,具體分析如下:

//main()函式,.cpp檔案

// created by ant on 07/16/2017

//預設排成公升序

//#include #include #include "sorttesthelper.h"

#include "stl_sort.h"

#include "selectionsort.h"

#include "insertionsort.h"

using namespace std;

intmain()

排序演算法的簡單實現:

插入排序

insertionsort.h檔案

#ifndef sorting_algorithm_insertionsort_h

#define sorting_algorithm_insertionsort_h

//一、直接插入排序

templatevoid directinsertionsort(t a, int n)

//找到合適插入位置j,第二次迴圈提前終止

a[j] = temp; }}

//二、

#endif // !sorting_algorithm_insertionsort_h

選擇排序selectionsort.h檔案

#ifndef sorting_algorithm_selectionsort_h

#define sorting_algorithm_selectionsort_h

//直接選擇排序

templatevoid directselectionsort(t a, int n)

if (k != i) }}

#endif // !sorting_algorithm_selectionsort_h

stl標準庫函式sort()函式:

sorttesthelper.h

//

//created by ant on 07/14/2017

//#ifndef sorting_algorithm_stl_sort_h

#define sorting_algorithm_stl_sort_h

#include templatevoid stl_sort(t arr, int size)

#endif // !sorting_algorithm_stl_sort_h

演算法效能測試輔助檔案

//be helpful to test sorting algorithm

//created by ant on 07/14/2017

//#ifndef sorting_algorithm_sorttesthelper_h

#define sorting_algorithm_sorttesthelper_h

#include #include #include #include #include #include using namespace std;

namespace sorttesthelper

//生成含有size個元素的近乎有序的隨機數組,用於凸顯插入排序排演算法的優勢

templatet* randomarray(int size, int swaptimes)

srand(time(null));

for (int i = 0; i < swaptimes; ++i)

return arr;

} //拷貝陣列

templatet* copyarray(t a, int size)

//輸出陣列

templatevoid printarray(t arr, int size)

//判斷陣列是否已有序(預設排序成功時為公升序)

templatebool issorted(t arr, int size)

return true;

} //輸出某一具體排序函式執行所需時間

templatevoid sortingtime(string sortname, void(*sort)(t, int), t arr, int size)

}#endif // !sorting_algorithm_sorttesthelper_h

附上一些測試結果:

說明一點,插入排序演算法是很值得讓人注意的,當 參與排序的資料 是 趨於有序的時候,插入排序演算法將會趨於o(n)的演算法複雜度,這將是效率最高的排序演算法,不過其最壞的演算法複雜度同選擇排序都是o(n^2),所以又讓人愛很不得了……

不過有一點應用是可以肯定的,那就是當使用其他o(nlonn)排序演算法實現到最後所以資料趨於整體有序的時候,再通過使用插入排序演算法實現後續部分,這將會大大的優化和提高演算法效率。明白我說的?好吧。

以上是自己對相關演算法的簡單實現,設計還不夠完善,待更,持續更新中……

排序演算法 之 效率測試

前面我們寫了常見的幾種排序演算法,並分析了各種演算法的實現思想,及時間複雜度等情況,但由於只是分析,木有實際的資料做對比測試,所以對各個演算法的效率也沒有乙個明確的概念,下面我們就通過具體的測試來看看同演算法之間的效率差距。宣告11個長度為100的元素取值範圍為0到1000的序列 int lengt...

號稱效率為O n 的排序演算法 計數排序

今天下午研究了下countingsort演算法,雖然這個演算法的效率為o n 簡單測試了一下,確實蠻快的。但是這個演算法的限制太多 資料集必須為正整數。也就是說資料集中不能有負數和小數,連0都不行!因此這個演算法的應用範圍很小,不過速度確實很快。其實網上已經有很多示例了,不過看和自己寫乙個示例感覺是...

安全性測試 以使用者登入為例

以使用者登入為例,安全測試需要注意哪些方面 密碼問題 驗證儲存在後台的使用者密碼是否加密。驗證使用者密碼在網路中傳輸是否加密。驗證使用者面是否具有時效性,到期後是否提示使用者更改密碼。驗證密碼輸入框是否支援複製和貼上 驗證使用者密碼 使用者登入 沒有登陸的前提之下,在瀏覽器的位址列中直接輸入登入後的...