把每個箱子用乙個鍊錶實現。在進行節點分配之前,每個箱子都是空的。
第一種實現:1.從與排序鍊錶的頭部開始,逐個刪除節點,並把它放到合適的箱子鍊錶的頭部
2.收集並連線每個箱子中的節點,產生有序的鍊錶
只使用乙個箱子陣列
第二種實現//range 是分數的範圍
void binsort(chain& x,int range)
//從箱子中收集各元素(從後向前收集)
for (int j = range;j >= 0;j--)
}delete bin;
}
直接寫成chain的成員函式,使用兩個箱子陣列,乙個指向頭,乙個指向尾。
template 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的...