今天下午研究了下countingsort演算法,雖然這個演算法的效率為o(n),簡單測試了一下,確實蠻快的。但是這個演算法的限制太多:
資料集必須為正整數。。。(也就是說資料集中不能有負數和小數,連0都不行!!) 因此這個演算法的應用範圍很小,不過速度確實很快。其實網上已經有很多示例了,不過看和自己寫乙個示例感覺是完全不一樣的,呵呵。。。
問:為什麼這個演算法能不比較就知道數值的位置呢?
答:因為這個演算法引入了」數軸「的概念,」數軸「的作用相當於是乙個計數器,記錄了每個數值出現的頻率,
」數軸「的大小應該為資料集中的最大值,以資料集中的數值作為索引(因此,前提條件是資料集必須都是正整數)
如在陣列,」數軸「的大小應該為5 , 具體內容為:
然後再計算資料集中的每個數值的位置:其實就是累加」數軸「 累加後的結果為:
因為」數軸「是有序的,因此,可以由」數軸「告訴你資料集中每個數值的位置,如:數值 3在整個資料集的第3位,直接插入即可。
這下明白了吧,關鍵就是」數軸「是有序的。
上**:
countingsort.h:
標頭檔案沒啥好注釋的。。。
countingsort.cpp:
測試**:
所有程式在xp sp3,vc2008在編譯通過。
演算法的效率(氣泡排序 選擇排序 快排)
演算法的效率可以用 時間複雜度o n 來度量。時間複雜度反應了程式執行時間隨輸入規模增長而增長的量級,很大程度上能反應演算法的優略程度。我們最開始認識的排序方法有氣泡排序和選擇排序但是這個演算法的效率怎麼樣呢,讓我們來測試一下。首先,我們隨機生成乙個長度為100000的隨機數組,並選用選擇排序的方法...
演算法 O n 2 排序演算法的效率比較
選擇 插入排序 main.cpp 1 include 3 include sorttesthelper.h 4 5using namespace std 67 template8 void selectionsort t arr,int n 16 1718 template19 void inser...
演算法效率測試 以排序演算法為例
在慕課網學習了一段時間後,覺得可以了,借鑑講師們說的和自己的經驗,總結下如何測試乙個程式 的效率和開銷問題。以排序演算法為例,具體分析如下 main 函式,cpp檔案 created by ant on 07 16 2017 預設排成公升序 include include include sortt...