C 演算法 箱子排序 鍊錶的運用

2021-08-22 15:12:40 字數 1007 閱讀 6257

箱子排序

題意:假設學生考試分數有0-100分或者a.b.c.d.f五種成績,讓同學按成績排序(公升序或降序)。

箱子排序 是為了讓所需時間比普通演算法更快。

箱子排序簡述:將分數設定為6個等第,0-5分,姓名設為乙個字元,有10個學生。

鍊錶結構有,學生的成績的指標,指向0-5分。將6種成績當作6個箱子。先把每個學生根據成績放

在對應箱子中,再按箱子成績0-5的順序,乙個個將箱子內的元素取出放在佇列(鍊錶)中。

struct studentrecord

operator int( ) const

}ostream & operator << (ostream & out, const studentrecord & x)

上面這些是準備工作,演算法的邏輯還未體現。

void binsort (chain & the chain , int range)

chain * bin ;

bin = new chain[range +1];     //range 是代表成績範圍,或者說箱子的數量。

// 這一塊**是核心,把學生的成績從鍊錶取出,並分配進相應成績的箱子。

int numberofelements = thechain.size(); 

for ( int i =0; i < numberofelements; i++)

for ( int j = range; j> = 0; j-- )                                 //這裡2重迴圈,range 是代表箱子數量,

while ( ! bin[ j ] .empty() )                             //  這裡是把每個 bin[ ] 裡的所有物件倒出來。

delete [ ] bin ;

} 人生第乙個演算法。記錄一下。

鍊錶箱子排序問題

箱子排序 每乙個箱子也是乙個小列表 1,逐個刪除輸入鍊錶的節點,把刪除節點分配到相應的箱子裡 2,把每個箱子中的鍊錶收集並連線起來,使其成為乙個有序鍊錶 即連續刪除鍊錶首元素,並將其插入某個箱子的鍊錶首位,然後從最後乙個箱子開始,逐個刪除每個箱子的首元素,並將其插入乙個鍊錶為空的鍊錶首位 void ...

鍊錶應用 箱子排序

1 問題描述 假定乙個鍊錶中包含了乙個班級內所有學生的資訊,每個節點中含有這樣的域 學生姓名 社會保險號碼 每次作業和考試的分數以及所有作業和考試的加權總分。假定所有的分數均為0 1 0 0範圍內的整數。如果採用第 2章中所給出的任一種排序演算法對錶中的學生按分數進行排序,所需要花費的時間均為 o ...

基數排序 鍊錶運用

基於兩兩比較的演算法,演算法的執行下界為 nlogn 如果想再降低時間複雜度,只能通過其他的非基於比較的方法。基數排序就是一種方法,其時間複雜度為o n 基數排序的過程,假設有4個數,我們用鍊錶把他們連一起,這4個數為 321 892 538 439 第一步 我們先建立10個鍊錶,l0 l9,然後按...