把每個箱子用乙個鍊錶實現。在進行節點分配之前,每個箱子都是空的。
1.從與排序鍊錶的頭部開始,逐個刪除節點,並把它放到合適的箱子鍊錶的頭部
2.收集並連線每個箱子中的節點,產生有序的鍊錶
第一種實現:
只使用乙個箱子陣列
//range 是分數的範圍
void
binsort
(chain
& x,
int range)
//從箱子中收集各元素(從後向前收集)
for(
int j = range;j >=
0;j--)}
delete
bin;
}
第二種實現
直接寫成chain的成員函式,使用兩個箱子陣列,乙個指向頭,乙個指向尾。
template
<
class
t>
void chain
::binsort
(int range)
//把節點分配到各個箱子中
for(
; first;first = first.link)
//新增到箱子中
else
//箱子為空
bottom[b]
= top[b]
= first;
}//收集各箱子中的元素
chainnode
*y =0;
//暫存箱子的頂部指標
for(b=
0;b<=range;b++
)else
//第乙個非空的箱子
first = bottomo[b]
; y = top[b];}
}if(y) y.link =0;
delete
top;
delete
bottom;
}
C 箱子排序
把每個箱子用乙個鍊錶實現。在進行節點分配之前,每個箱子都是空的。1.從與排序鍊錶的頭部開始,逐個刪除節點,並把它放到合適的箱子鍊錶的頭部 2.收集並連線每個箱子中的節點,產生有序的鍊錶第一種實現 只使用乙個箱子陣列 range 是分數的範圍 void binsort chain x,int rang...
經典演算法 箱子排序
include include include typedef struct studentstu stu student 40 int main else if student j number bottom number else head p for c 0 cname,head number...
演算法複習 箱子排序
例子 在乙個鍊錶中,每個節點包含乙個名字和分數,然後需要按照分數來進行排序然後進行輸出,這裡就可以用到箱子排序 首先得到最大數和最小數之間的數目個數 maxnum minnum 然後建立乙個陣列 鍊錶 指標來分別儲存這幾個數的內容 比如 分數為0的有 張三,李四,王五 分數為1的有 賀6 分數為2的...