作者LPH66 ((short)(-15074))
看板C_and_CPP
標題Re: [問題] 關於雙層排序
時間Mon Apr 27 19:21:02 2009
※ 引述《suscym (DoDreamEr)》之銘言:
: 想了許久 都想不出乾淨俐落的作法 ....
: 有可能是我本身的資料結構是array 不是動態 才比較麻煩
: ( 所以暫時不考慮改變資料結構)
: 今天我有一結構 裡面有變數 帳戶餘額 和 年齡, 我先透過stable的排序法
: 依照帳戶餘額排列過(因為有可能餘額同 所以我用stable的) 接著
: 我想在"資料已經依照餘額由小到大排列過"的條件下,再進行年齡的排列
: 但是到目前為止 我只想出另外宣告一些資料結構 透過回圈不斷檢查 再把新順序放在
: 新結構紀錄,但是一直感覺這做法很沒效率 又可能有邏輯上的漏洞... 所以想上來
: 請教各位的看法,謝謝
如果你要的是先對餘額排 相同時再排年齡
以你這個方向有一個小修的做法
反過來先對年齡排序
然後再用 stable 的排序對餘額排
這樣就是你要的了
其原理嘛...有個排整數的 sort 法叫 Radix sort
這個方法是 LSB 先排的 Radix sort 的變形
以那裡來類比 "十位" 相當於你的 "餘額" (主要鍵)
"個位" 相當於你的 "年齡" (次要鍵)
這樣就容易理解了
你之所以為碰壁是因為你做成了 MSB 先排的 Radix sort
這需要分別在每堆主要鍵相同的資料中對次要鍵來排
---
當然比較漂亮的做法是照原推文說的 比大小時直接就比出兩筆資料的前後
這樣一口氣就可以把資料排好了
--
実琴:「
河野!你真的就這樣被
物質慾望給吸引過去了嗎?!」
亨:「只要
穿著女裝擺出親切的樣子,所有必要花費就能
全免,似乎一點都不壞啊。」
実琴:「難道你沒有
男人的尊嚴了嗎?!」
亨:(斷然道)「
沒有。在
節衣縮食且
生活吃緊的
學生面前,
沒有那種東西。」
--プリンセス・プリンセス 第二話
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.30.84
→ suscym:真的很謝謝你耶 這MSB和LSB以前都學過 但是不大會活用 04/27 20:37
→ suscym:沒想到今天這兩種關聯變數的例子可以這樣想 好強大!!! 04/27 20:37
→ suscym:謝謝~!!! 04/27 20:37