[問題] qsort排列字串問題

看板C_and_CPP (C/C++)作者 (綠茶不綠)時間14年前 (2012/04/16 14:15), 編輯推噓0(0028)
留言28則, 4人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) c++ 問題(Question): 我的目標 是要 先輸入一個n決定要輸入幾個字串 然後 把這些字串依照大小順序排列 這些字串可以是數字 也可以是英文字 因為老師沒有教過qsort的用法 所以我的CODE也是從GOOGLE上找來的 (而且他又規定要O(nlogn)的速度) 所以也不能自己打自己的排列(應該說我根本不知道該怎麼打~"~) http://codepad.org/o9NFsIdb 這個是原本自己先定義一個字串陣列 然後讓它排序 4 123 ABC xyz Charlie請按任意鍵繼續 . . . 這是輸出的結果 看起來是有按照字串的大小排列 但是如果 我把它改成自己輸入字串 http://codepad.org/Ppo7WEud 它就會跑出一些奇怪的符號 或者根本什麼都跑不出來 不知道這是記憶體儲存的問題還是什麼 希望有人可以幫我看一下@@ 還是這個題目本來就不應該用這樣做呢? 有什麼更好的方法嗎 感謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.139.39

04/16 14:27, , 1F
先了解 qsort 的四個參數分別要傳什麼吧
04/16 14:27, 1F

04/16 14:33, , 2F
我其實看不懂它第四個參數到底是怎麼運作的@@
04/16 14:33, 2F

04/16 14:34, , 3F
GOOGLE過了還是沒什麼頭緒 身旁的書也沒有提到
04/16 14:34, 3F

04/16 14:44, , 4F
是因為它sort完之後 會排到陣列的最後面嗎
04/16 14:44, 4F

04/16 15:34, , 5F
04/16 15:34, 5F

04/16 16:14, , 6F
http://ppt.cc/PChU 用法說明,內部原理看樓上的
04/16 16:14, 6F

04/16 16:38, , 7F
你應該要修改compareInt使他適用於比較字串長度...目前是
04/16 16:38, 7F

04/16 16:41, , 8F
前4個字一樣後面就不管囉
04/16 16:41, 8F

04/16 16:44, , 9F
至於印出來會這樣..跟你的參數有關
04/16 16:44, 9F

04/16 20:41, , 10F
那請問 如果它超過四個字 但是長度一樣 要怎麼比呢?
04/16 20:41, 10F

04/16 20:44, , 11F
應該是從第一個開始比
04/16 20:44, 11F

04/16 22:43, , 12F
我還是不太清楚為什麼他只會比四個字@@可以解釋一下嗎
04/16 22:43, 12F

04/16 23:19, , 13F
---------請忽略上面那堆,寫的有點亂,下面重回----
04/16 23:19, 13F

04/16 23:20, , 14F
你那段程式會錯是因為你沒有給予初值,而且你將100
04/16 23:20, 14F

04/16 23:20, , 15F
筆資料都一起下去排序,其中那些亂碼也都一起排序
04/16 23:20, 15F

04/16 23:21, , 16F
如果你在排序後將100筆資料都cout出來你會發現你輸入
04/16 23:21, 16F

04/16 23:21, , 17F
的資料都有正常排序。
04/16 23:21, 17F

04/16 23:22, , 18F
你程式有兩種解法
04/16 23:22, 18F

04/16 23:22, , 19F
1.將所有資料都給初始值,但你會排序一堆空值,這樣
04/16 23:22, 19F

04/16 23:23, , 20F
會浪費你的時間,並且印出一堆'\0'
04/16 23:23, 20F

04/16 23:23, , 21F
2.sizeof(str_buf)/sizeof(str_buf[0])改成n
04/16 23:23, 21F

04/16 23:24, , 22F
只排序你所輸入的資料筆數,這是比較好的解法
04/16 23:24, 22F

04/16 23:24, , 23F
那些資料都會放在最前面n個
04/16 23:24, 23F

04/16 23:25, , 24F
另外幫我把上面很亂的那堆回文修掉吧...
04/16 23:25, 24F
※ 編輯: georgeya007 來自: 140.113.139.39 (04/16 23:35)

04/17 01:47, , 25F
函式取名為compareInt..顧名思義是指用來做int的比較...
04/17 01:47, 25F

04/17 01:49, , 26F
會只取4個字的原因是他把char指標轉為int指標再取值
04/17 01:49, 26F

04/17 01:59, , 27F
int為4byte所以取4個字 另我前面推文誤以為是要比長度 抱歉
04/17 01:59, 27F

04/17 02:01, , 28F
題目應該是需要用strcmp/strncmp
04/17 02:01, 28F
文章代碼(AID): #1FYxaTv- (C_and_CPP)
文章代碼(AID): #1FYxaTv- (C_and_CPP)