在慕課網學習了一段時間後,覺得可以了,借鑑講師們說的和自己的經驗,總結下如何測試乙個程式**的效率和開銷問題。
以排序演算法為例,具體分析如下:
//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都不行!因此這個演算法的應用範圍很小,不過速度確實很快。其實網上已經有很多示例了,不過看和自己寫乙個示例感覺是...
安全性測試 以使用者登入為例
以使用者登入為例,安全測試需要注意哪些方面 密碼問題 驗證儲存在後台的使用者密碼是否加密。驗證使用者密碼在網路中傳輸是否加密。驗證使用者面是否具有時效性,到期後是否提示使用者更改密碼。驗證密碼輸入框是否支援複製和貼上 驗證使用者密碼 使用者登入 沒有登陸的前提之下,在瀏覽器的位址列中直接輸入登入後的...