鍊錶應用 箱子排序

2022-04-06 02:49:35 字數 1061 閱讀 2602

1、問題描述

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

怎樣實現箱子呢?注意到每個箱子都是乙個由節點組成的線性表。箱子中的節點數目介於0到n之間。一種簡單的方法就是把每個箱子都描述成乙個鍊錶。在進行節點分配之前,所有的箱子都是空的。

對於箱子排序,需要能夠: 1 )從欲排序鍊錶的首部開始,逐個刪除每個節點,並把所刪除的節點放入適當的箱子中(即相應的鍊錶中) ; 2) 收集並鏈結每個箱子中的節點,產生乙個排序的鍊錶。如果所輸入的鍊錶為 c h a i n型別(見程式 3 - 8),那麼可以: 1) 連續地刪除鍊錶首元素並將其插入到相應箱子鍊錶的首部; 2) 逐個刪除每個箱子中的元素(從最後乙個箱子開始)並將其插入到乙個初始為空的鍊錶的首部。

實現1:

1

void binsort(chain& c,int

range)212

13for(int i=range;i>=0;--i)

14 22}

2324

delete bin;

25 }

view code

實現2:將binsort作為鍊錶的成員函式

1 template

2void chain::binsort(int range, int(*value)(t&x))313

14for (; first; first = first->link)

1522

else

2326}27

28 chainnode*y = 0;29

for (b = 0; b <= range; b++)

3040}41

if (y) y->link = 0;42

delete bottom;

43delete top;

4445 }

view code

鍊錶箱子排序問題

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

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

箱子排序 題意 假設學生考試分數有0 100分或者a.b.c.d.f五種成績,讓同學按成績排序 公升序或降序 箱子排序 是為了讓所需時間比普通演算法更快。箱子排序簡述 將分數設定為6個等第,0 5分,姓名設為乙個字元,有10個學生。鍊錶結構有,學生的成績的指標,指向0 5分。將6種成績當作6個箱子。...

線性表的應用 箱子排序 桶排序 和基數排序

箱子排序 箱子排序的思想簡單而言就是分配range 比如 0,9 range 10 個箱子,然後把每個相同的元素放入乙個箱子,最後把箱子連線起來得到新的有序的線性表。箱子排序是一種穩定排序,它不會改變排序前線性表中相同元素的相對次序。雖然可以用陣列來表示箱子,但是涉及到箱子的合併 鍊錶的合併操作為 ...