箱子排序(桶排序),基數排序

2021-10-07 14:45:49 字數 1689 閱讀 2559

#include

#include

#include

//#include "circularlistwithheader.h"

#include

"extendedchain.h"

#include

/*本演算法為箱子排序的演算法

* author: zailushang

* data: 2020-06-27

* *目的為了熟悉c++的雙向鍊錶

* **/#define buffsize 1000000

#define radix 100

struct studentrecord

operator

int(

)const

studentrecord()

:sort(0

),name

(null

)studentrecord

(int sorts,std::string *names)

:sort

(sorts)

,name

(names)};

void

binsort

(std::list

&thelist,

int range)

for(

int i =

0; i <= range;

++i)

}delete

p;std::cout<<

"the bin sort time is "

<<

float

(clock()

-t)/clocks_per_sec;

}void

binsortbylist

(extendedchain

&thelist,

int range)

for(

int j = range;j >=0;

--j)

}delete

p;}void

binsortusedbyradix

(extendedchain

&thelist,

int c)

for(

int j = listsize;j >=0;

--j)

}delete

p;}void

radixsort

(extendedchain

&thelist,

int range)

for(

int j = listsize;j>=0;

--j)

}//binsortusedbyradix(thelist,i+1);

}delete

p;}int

main()

/* 經過上述的測試比較,發現stl官方給的雙向鍊錶不如自己寫的單向鍊錶的插入和箱子排序速度快,因為主要是插入的時候需要兩個

指標進行要轉換,肯定會比單鏈表慢。

氣泡排序比箱子排序法慢了不止一點兩點(在大資料的情況下)

*/

這裡說明一點,基數排序桶排序的乙個優化。但是如果輸入範圍和你的桶的個數一樣的時候,基數排序的優勢就沒有那麼大了。

記住:雖然基數排序的時間複雜度雖然有o(n),桶排序有o(n+range)。但是在實際中,在某種情況下,基數排序不一定比桶排序快。

(箱子)桶排序及基數排序

桶排序是基於鍊錶的,相鄰的桶之間和桶中相鄰的元素之間皆用鍊錶相連線,可以把它想象成乙個矩陣。用乙個例子來說明桶排序。假設有乙個鍊錶,其中的元素需要進行排序,元素為abcdefghij,其值依次為2454304344,如a2 b4 c5 d4 e3 f0 g4 h3 i4 j4。若根據值進行排序。首先...

基數排序(桶排序)

1。什麼是基數排序 radix sort 基數排序 屬於分配式排序 distribution sort 又稱 桶排序 bucket sort 它是通過鍵值的各個位的值,將要排序的元素分配至某些 桶 中,達到排序的作用。2.它和歸併一樣,屬於穩定型演算法。public void radixsort i...

基數排序(桶排序)

思想 先把這組資料的個位排有序,再把十位排有序,再排百位 千位 include include include include void showarr int arr,int len printf n int getmaxnumfin int arr,int len 找陣列中最大數,並求出最大數的...