在前幾回我們已經對【演算法】排序演算法之氣泡排序、【演算法】排序演算法之插入排序、【演算法】排序演算法之希爾排序、【演算法】排序演算法之選擇排序、【演算法】排序演算法之快速排序、【演算法】排序演算法之歸併排序、【演算法】排序演算法之堆排序、【演算法】排序演算法之計數排序、【演算法】排序演算法之桶排序做了說明分析。本回,將對基數排序進行相關說明分析。
氣泡排序(bubble sort)插入排序(insertion sort)希爾排序(shell sort)選擇排序(selection sort)快速排序(quick sort)歸併排序(merge sort)堆排序(heap sort)計數排序(counting sort)桶排序(bucket sort)基數排序(radix sort)
基數排序(radix sort)是一種非比較型整數排序演算法。
原理是將整數按位數切割成不同的數字,然後按每個位數分別比較。基數排序的方式可以採用lsd(least significant digital)或msd(most significant digital),lsd的排序方式由鍵值的最右邊開始,而msd則相反,由鍵值的最左邊開始。
msd:先從高位開始進行排序,在每個關鍵字上,可採用計數排序lsd:先從低位開始進行排序,在每個關鍵字上,可採用桶排序
① 將所有待比較數值(正整數)統一為同樣的數字長度,數字較短的數前面補零。② 從最低位開始,依次進行一次排序。
③ 這樣從最低位排序一直到最高位排序完成以後, 數列就變成乙個有序序列。
分步圖示說明:設有陣列 array = ,對其進行基數排序:
在上圖中,首先將所有待比較數字統一為統一位數長度,接著從最低位開始,依次進行排序。
按照個位數進行排序。排序後,數列就變成了乙個有序序列。按照十位數進行排序。
按照百位數進行排序。
時間複雜度:o(k*n)設待排序的陣列r[1…n],陣列中最大的數是d位數,基數為r(如基數為10,即10進製,最大有10種可能,即最多需要10個桶來對映陣列元素)。空間複雜度:o(k + n)
穩定性:穩定
處理一位數,需要將陣列元素對映到r個桶中,對映完成後還需要收集,相當於遍歷陣列一遍,最多元素數為n,則時間複雜度為o(n+r)。所以,總的時間複雜度為o(d*(n+r))。
基數排序過程中,用到乙個計數器陣列,長度為r,還用到乙個rn的二位陣列來做為桶,所以空間複雜度為o(rn)。
基數排序基於分別排序,分別收集,所以是穩定的。
基數排序與計數排序、桶排序這三種排序演算法都利用了桶的概念,但對桶的使用方法上有明顯差異:int maxbit(int data, int n) //輔助函式,求資料的最大位數 int d = 1; int p = 10; while (maxdata >= p) return d;/* int d = 1; //儲存最大的位數 int p = 10; for(int i = 0; i < n; ++i) } return d;*/}void radixsort(int data, int n) //基數排序 for(j = 1; j < 10; j++) count[j] = count[j - 1] + count[j]; //將tmp中的位置依次分配給每個桶 for(j = n - 1; j >= 0; j--) //將所有桶中記錄依次收集到tmp中 for(j = 0; j < n; j++) //將臨時陣列的內容複製到data中 data[j] = tmp[j]; radix = radix * 10; } delete tmp; delete count;}
基數排序:根據鍵值的每位數字來分配桶;基數排序不是直接根據元素整體的大小進行元素比較,而是將原始列表元素分成多個部分,對每一部分按一定的規則進行排序,進而形成最終的有序列表。計數排序:每個桶只儲存單一鍵值;
桶排序:每個桶儲存一定範圍的數值;
鏈式基數排序空間複雜度 演算法 排序演算法之基數排序
在前幾回我們已經對氣泡排序 直接插入排序 希爾排序 選擇排序 快速排序 歸併排序 堆排序 計數排序 桶排序做了說明分析。本回,將對基數排序進行相關說明分析。基數排序 radix sort 是一種非比較型整數排序演算法。原理是將整數按位數切割成不同的數字,然後按每個位數分別比較。基數排序的方式可以採用...
鏈式基數排序空間複雜度 帶你快速了解基數排序的原理
基數排序 radix sort 屬於 分配式排序 distribution sort 是一種非比較型整數排序演算法,其原理是將整數按位數切割成不同的數字,然後按每個位數分別比較。由於整數也可以表達字串 比如名字或日期 和特定格式的浮點數,所以基數排序也不是只能使用於整數。基數排序法是屬於穩定性的排序...
排序演算法之 基數排序 及其時間複雜度和空間複雜度
基數排序 radix sort 屬於 分配式排序 distribution sort 又稱 桶子法 bucket sort 或bin sort,顧名思義,它是透過鍵值的部份資訊,將要排序的元素分配 至某些 桶 中,藉以達到排序的作用,基數排序法是屬於穩定性的排序,其時間複雜度 為o nlog r m...