箱子排序
題意:假設學生考試分數有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,然後按...