《演算法導論》學習之基數排序

2021-06-16 18:51:19 字數 884 閱讀 9677

基數排序是一種非比較排序,其原理是將整數按位數切割成不同的數字,然後按每個位數分別比較。由於整數也可以表達字串(比如名字或日期)和特定格式的浮點數,所以基數排序也不是只能使用於整數。

基數排序的時間複雜度為o(n),但是不一定優於o(nlgn),因為基數排序的時間複雜度前面有個係數k,如果k比較大的話,那其時間複雜度將超過o(nlgn)

比如這樣乙個數列排序: 342 58 576 356, 以下描述演示了具體的排序過程(紅色字型表示正在排序的數字)

第一次排序(個位):

3 4 2

5 7 6

3 5 6

0 5 8

第二次排序(十位):

3 4 2

3 5 6

0 5 8

5 7 6

第三次排序(百位):

0 5 8

3 4 2

3 5 6

5 7 6

結果: 58 342 356 576

1、為什麼要從最低位開始排序?

如果要從高位排序, 那麼次高位的排序會影響高位已經排好的大小關係. 在數學中, 數字越高,數字值對數的   大小的影響就越大.從低位開始排序,就是對這種影響的排序. 

數字按照影響力從低到高的順序排序, 數字影響力相     同則比較數字值.

2、為什麼同一數字的排序子程式要使用穩定排序?

穩定排序的意思是指, 待排序相同元素之間的相對前後關係,在各次排序中不會改變.比如例項中具有十位數字5的兩個數字58和356, 在十位排序之前356在58之前,在十位排序之後, 356依然在58之前.

穩定排序能保證,上一次的排序成果被保留,十位數的排序過程能保留個位數的排序成果,百位數的排序過程能保留十位數的排序成果.

演算法總結系列之五:基數排序(radix sort)

演算法導論 基數排序

時間複雜度 o n 基本思路 兩個數比較大小,我們的直觀感覺是先比較高位,若相同則比較低位。但是這樣做需要記錄額外的資料,浪費空間。而基數排序則是先比較低位,再比較高位。通過各個位的比較進行排序,如果陣列元素最大有n位,則總共需要n次排序。注意 按位排序必須是穩定排序,所以在這我選擇了計數排序。具體...

演算法之基數排序

基數排序思想 利用個十百千等位數數字進行排序,不經過資料之間比較,以下 純手擼,實現起來還是比較簡單的,不過是第一次實現,不追求效率,只求實現。真個實現主要邏輯分為兩步,第一步把原始資料按照位數大小分配到二維陣列中,第二步再把二維陣列中資料按順序取出到原始陣列中,完成一次各位排序 接下來就是迴圈,依...

演算法 排序之基數排序

基數排序也是穩定的內排序。因為它的實現是基於內部使用了穩定的排序實現的所以基數排序整體是穩定的,而且時間複雜度為o n 舉個例子 現在我們將一些3 多 位數排序,如果你說直接判斷就好的話,那你就太天真了,因為那就又變成看o nlgn 或者o n 如何能降低時間複雜度變成o n 呢?那就要使用線性時間...