待排序序列:A[n]
排序後的數組:B[n]
記錄A中某個數據在表B中的位置:count[n](存的是值爲比該數據小的數據的個數)
計數排序算法針對待排序數組中的每個記錄,掃描待排序的數組一趟,統計待排序數組中有多少個記錄的值比該記錄的值小。假設針對某一個記錄,統計出的計數值爲c,那麼,這個記錄在新的有序數組中的合適的存放位置即爲c。
這樣可以看到,每個數據都需要和自己之後的數據進行比較,一直掃到待排數組的尾部,可以得到數組count[n]。這個過程的時間複雜度爲o(n^2)
得到count之後的操作爲:B[count[i]]=A[i],掃描一遍A數組,得到的B即爲排序後的數組。
這個過程的時間複雜度爲:o(n).
整個過程的時間複雜度應該爲o(N^2).
計數過程的時間複雜度高於計數之後的排序過程。
爲什麼有說計數排序是線性的說法?計數不花時間了?沒理由。