[問題] qsort的compare function

看板C_and_CPP作者 (搜尋樹)時間11年前 (2014/02/22 17:01), 編輯推噓3(3013)
留言16則, 7人參與, 最新討論串1/1
int compare(const void *arg1, const void *arg2) { return (*(int *)arg1 - *(int *)arg2); } 請問為什麼這是由小排到大的意思? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 182.235.143.146

02/22 17:26, , 1F
你減減看就知道了
02/22 17:26, 1F

02/22 18:08, , 2F
你跑跑看就知道了
02/22 18:08, 2F

02/22 18:10, , 3F
你試試看就知道了
02/22 18:10, 3F

02/22 18:14, , 4F
因為回傳如果負值(1 < 2),表示 1 排在 2 前面
02/22 18:14, 4F

02/22 18:16, , 5F
這只是 qsort 對於該參數的定義,沒有特殊的原因
02/22 18:16, 5F

02/22 18:17, , 6F
只要改寫函數內容就能變由小排到大了
02/22 18:17, 6F

02/22 18:20, , 7F
可以考慮用 Lambda 用起來比較直覺好用
02/22 18:20, 7F

02/22 18:21, , 8F
^改寫判斷的部份
02/22 18:21, 8F

02/22 18:24, , 9F
lambda 是 C++
02/22 18:24, 9F

02/22 21:46, , 10F
這跑跑看/試試看是要怎麼知道啦= =
02/22 21:46, 10F

02/22 21:47, , 11F
然後這個遇到溢位就錯了 所以還是不要這樣寫
02/22 21:47, 11F

02/23 01:41, , 12F
好久沒有人關心我了.....
02/23 01:41, 12F

02/23 13:20, , 13F
我覺得他關心的是 compare,你的參數
02/23 13:20, 13F

02/24 17:52, , 14F
跑跑看很簡單阿,生一個陣列,用qsort()和這個compare
02/24 17:52, 14F

02/24 17:53, , 15F
去排,看看結果,把arg1/arg2換位置,再看結果
02/24 17:53, 15F

02/24 17:53, , 16F
把 - 改成 + ,再看結果,跟國小自然科實驗一樣
02/24 17:53, 16F
文章代碼(AID): #1J26TqaX (C_and_CPP)