演算法導論 基數排序

2021-06-17 17:24:48 字數 798 閱讀 2870

時間複雜度:o(n).

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

具體實現如下

#include#include#includevoid countsort(int* arraya,int* arrayd,int n,int k);

void radixsort(int* arraya,int n);

void main()

; int n=sizeof(arrayd)/sizeof(int);

radixsort(arrayd,n);

for(int i=0;i=0;j--)

for(int i=0;i注意:我是在vs2008上執行的,與vc 6.0有點區別,主要是迴圈體中的迴圈變數的作用域,出錯體現在迴圈變數的重複定義上。例如:在vs2008或vs2010上,程式為:

#include

void main()

則在vc 6.0上需改為:

#include

void main() 

原文:

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

基數排序是一種非比較排序,其原理是將整數按位數切割成不同的數字,然後按每個位數分別比較。由於整數也可以表達字串 比如名字或日期 和特定格式的浮點數,所以基數排序也不是只能使用於整數。基數排序的時間複雜度為o n 但是不一定優於o nlgn 因為基數排序的時間複雜度前面有個係數k,如果k比較大的話,那...

演算法導論CLRS 8 3 基數排序

8.3 基數排序 radix sort include include include includeusing namespace std typedef vector iterator tvecite typedef vector iterator tvecpite void radixsort...

基數排序演算法

include stdafx.h include iostream include math.h using namespace std struct radixsort 建立迴圈鍊錶 radixsort creatlink else le ls ls new radixsort 為下乙個節點在堆記...