[問題] 雙重迴圈與單一迴圈出來的值不同

看板C_and_CPP (C/C++)作者 (我也來56)時間14年前 (2011/08/04 17:36), 編輯推噓0(0016)
留言16則, 4人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) Linux+GCC 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) NO 問題(Question): 我現在需要用雙重迴圈來檢查在空間中每一個點之間互相的距離(簡單來說是這樣) 我在Z方向取一個小範圍 然後找出這個在這個範圍內的點中 投影在xy平面最近的第N個的二維距離是多少(簡單來說是這樣) 我如果只算一層(j=0 or j=任何數)沒問題 可是如果把j放入迴圈跑就會出問題 我把二維平面每一個距離x[M]都先塞0 之後距離都找出來 用qsort由小到大快速排序 判斷x[k]=0 && x[k+1]!=0的時候 這個K就是我要的 (因為x[k+N]就是我要的距離) 可是不知道為什麼雙重迴圈(多對多)K就會卡住上不去 如果用j=1000或2000只有找單純一對多就沒問題 有分析很多次K可是都找不出問題zzZ 程式碼(Code):(請善用置底文網頁, 記得排版) http://codepad.org/A0qpZUMC 出問題在第62行 如果把這層剝掉 直接把初始值j令為任意數都不會出問題zzZ 補充說明(Supplement): 非常誠心的賜教 我沒有受過非常正規的C語言訓練 全都是自己翻書+網路+PTT慢慢摸索出來的 可能會有很多白痴的錯誤 或是用很多笨的方法 上來發個文希望能夠解決問題 如果能夠解決且在台大附近的人 我會以你自己選的麥當勞作為答謝Orz 拜託了 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.109.234.170

08/04 17:42, , 1F
程式碼至少排成像這樣吧 http://codepad.org/9NB2bzOq
08/04 17:42, 1F

08/04 17:42, , 2F
我其實看不懂你的東西,有原問題或paper可附上,但目前..
08/04 17:42, 2F

08/04 17:43, , 3F
我看到的錯是: compare function 你寫錯了(應是抄的)
08/04 17:43, 3F

08/04 17:43, , 4F
我也沒有受過訓練 XD
08/04 17:43, 4F

08/04 17:44, , 5F
return ( *(float*)a - *(float*)b);
08/04 17:44, 5F

08/04 17:45, , 6F
compare function我是拿cplusplus的qsort範例來用的
08/04 17:45, 6F

08/04 17:47, , 7F
那是因為他的array 是用 int,但你的 array 是 float
08/04 17:47, 7F

08/04 18:35, , 8F
X!超想罵髒話的 我終於找出問題了QQ 原因在我第一個if
08/04 18:35, 8F

08/04 18:36, , 9F
判斷y<l那邊 因為這樣沒辦法把每個x[i]給值給他
08/04 18:36, 9F

08/04 18:36, , 10F
變成下一次迴圈以後會有上一次迴圈留下來的非0項去排序
08/04 18:36, 10F

08/04 18:37, , 11F
才會造成越後面越難上去 因為x都越塞越多非0項
08/04 18:37, 11F

08/04 18:38, , 12F
只要在做第一個if的時候再把x[]歸零一次就好了
08/04 18:38, 12F

08/04 18:38, , 13F
看了兩天兩夜 終於可以去洗澡了 QQ
08/04 18:38, 13F

08/04 18:39, , 14F
另外感謝tr大 雖然我改float好像有點問題 不過謝謝你
08/04 18:39, 14F

08/04 18:39, , 15F
我還要繼續學下去
08/04 18:39, 15F

08/04 18:54, , 16F
是我寫錯了 Orz..return ( *(float*)a > *(float*)b);
08/04 18:54, 16F
文章代碼(AID): #1EEcWCBc (C_and_CPP)
文章代碼(AID): #1EEcWCBc (C_and_CPP)