[分享] qsort

看板C_and_CPP作者 (人間失格)時間14年前 (2011/08/27 23:01), 編輯推噓4(4030)
留言34則, 7人參與, 最新討論串1/1
這幾天寫了幾題的DFS 發現qsort對於需要某些特殊需求的DFS來說實在好用 比如說當DFS要求有兩個以上子節點時 先輸出編號小的 那麼先sort好再用adjacent list實作非常簡單 但是sort怎麼弄最簡捷有力呢? 小弟不才提供個小方法: 1.首先儲存edge的方法: typedef struct List{ int head,tail; }LIST; 存完後呼叫qsort 2.qsort compare的寫法: int com(const void *a,const void *b) { LIST c,d; c=*(LIST*)(a); d=*(LIST*)(b); if(c.head!=d.head) //先排好頭 return c.head>d.head?1:-1; else{ //頭一樣大的話 if(c.tail!=d.tail) return c.tail>d.tail?1:-1; //比尾巴 else return 0; } } 上面稍作修改 就可以快速做出字典排序的效果 省去了許多打code的麻煩 時間又是 n log n而已 提出一點膚淺的想法> < 如果有人有更好的修正法麻煩幫忙修改> < 謝謝> < -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.114.200.13

08/27 23:05, , 1F
編號小的不就和你的travel順序有關嗎...
08/27 23:05, 1F

08/27 23:06, , 2F
嗯啊所以先排序好到時travel直接跑下一個就可以了呀
08/27 23:06, 2F

08/27 23:07, , 3F
so? 你邊travel就邊輸出呀....
08/27 23:07, 3F

08/27 23:08, , 4F
你說說看你怎麼travel的...
08/27 23:08, 4F

08/27 23:10, , 5F
因為一般edge不是不會照順序輸入嗎?
08/27 23:10, 5F

08/27 23:10, , 6F
所以我才想sort好比較好找呀
08/27 23:10, 6F

08/27 23:12, , 7F
就算不是按照順序輸入 也會對點編號呀....
08/27 23:12, 7F

08/27 23:13, , 8F
travel 只要按照給定的順序規則就好
08/27 23:13, 8F

08/27 23:16, , 9F
咦?!所以你們做DFS前會先sort嗎??
08/27 23:16, 9F

08/27 23:17, , 10F
一般來講 不會
08/27 23:17, 10F

08/27 23:17, , 11F
我都會sort完,每個邊的一開始存在哪都會記錄耶
08/27 23:17, 11F

08/27 23:17, , 12F
不sort比較不好做吧?!
08/27 23:17, 12F

08/27 23:18, , 13F
travel 的順序就可以決定了
08/27 23:18, 13F
像我 比如說輸入 1 2 3 6 4 9 1 7 2 6 我會把它全部弄成雙向 弄成 1 2 1 7 2 1 2 6 3 6 4 9 6 2 6 3 7 1 然後存每個開頭有幾個 比如說1就是有2個 然後存每個開頭在第幾個 比如說3就是4 然後去跑DFS 這樣真的不會比較方便嗎?? ※ 編輯: flere 來自: 140.114.200.13 (08/27 23:23)

08/27 23:22, , 14F
不過如果真要sort的話 何不用radix sort
08/27 23:22, 14F

08/27 23:22, , 15F
你好,我能幫上你的忙,那就再好也不過了~
08/27 23:22, 15F

08/27 23:23, , 16F
樓上XDDDDDD
08/27 23:23, 16F

08/27 23:24, , 17F
因為qsort是內建的不用打很多行呀,而且我那樣打也是radix
08/27 23:24, 17F

08/27 23:24, , 18F
2F大大被分享了....XD
08/27 23:24, 18F

08/27 23:24, , 19F
sort 的觀念吧
08/27 23:24, 19F

08/27 23:24, , 20F
XDDD
08/27 23:24, 20F

08/27 23:24, , 21F
@樓上上 不是2F唷 XDDDD
08/27 23:24, 21F

08/27 23:25, , 22F
radix sort的觀念? nlogn 和 kn 的差距耶...
08/27 23:25, 22F

08/27 23:26, , 23F
比較好打呀> <我記得radix還滿長的耶> <
08/27 23:26, 23F

08/27 23:27, , 24F

08/27 23:28, , 25F
想看的可以稍稍看一下,不過bubble把她想成我換成qsort了> <
08/27 23:28, 25F

08/27 23:38, , 26F
恩...看來我有點想錯方向了...XD
08/27 23:38, 26F

08/27 23:39, , 27F
假如要快一點就是sort index啦
08/27 23:39, 27F

08/27 23:41, , 28F
假如測資範圍不大時用adjacency matrix 會比較方便
08/27 23:41, 28F

08/27 23:41, , 29F
喔喔XD因為我是index sort完後,在sort他的尾端
08/27 23:41, 29F

08/27 23:41, , 30F
喔隊阿只是我上次題目TLE了XD
08/27 23:41, 30F

08/27 23:43, , 31F
話說剛剛看了f大排列組合的文章,簡直太酷了!!!
08/27 23:43, 31F

08/27 23:44, , 32F
你誤會了是以index去對應資料 只要交換index 不用交換data
08/27 23:44, 32F

08/27 23:46, , 33F
喔喔!!我懂你的意思!!這樣可以變更精簡呢XD
08/27 23:46, 33F

08/28 06:59, , 34F
印象中我都用std::sort...
08/28 06:59, 34F
文章代碼(AID): #1EMGRcSD (C_and_CPP)