[問題] 重新排序並且記錄排序前的位置

看板C_and_CPP (C/C++)作者 (最寂寞是那一刻的溫柔)時間13年前 (2012/06/25 19:06), 編輯推噓0(0020)
留言20則, 2人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) C 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) no 問題(Question): 將餵入的array中數字做排序之後 將由小到大的數字依照原本array中的位置輸出 餵入的資料(Input): A[10]={4,1,7,8,3,0,0,9,2,6}; 預期的正確結果(Expected Output): 6,7,2,9,5,1,10,3,4,8 錯誤結果(Wrong Output): 7,0,2,9,5,1,10,3,4,8 程式碼(Code):(請善用置底文網頁, 記得排版) http://ideone.com/c6Let #include<stdio.h> #include <string.h> #include <stdlib.h> int comp_func(const void* a, const void* b) { return (*(int*)a-*(int*)b); //return( strcmp((char *)a,(char *)b) ); } int main() { int a,b,c,d; int i,j; int count=5; int A[10]={4,1,7,8,3,0,0,9,2,6}; int B[10]={0}; int C[10]={0}; int M[10]={0}; int num=10; for(i=0;i<num;i=i+10) { for(j=0;j<10 && i+j <num;j++) { B[j]=A[i+j]; //printf("%d\n ",j); } qsort((void*)B, 10, sizeof(*B), comp_func); for (a=0;a<10;a++) { for(b=0;b<10;b++) { if(B[a]==A[b]&&M[b]==0) { C[a]=b+1; M[b]=M[b]+1; } else { continue; } } } for (j=0;j<10;j++) { printf("%d = %d\n",j+1,C[j]); } } 補充說明(Supplement): 無 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.114.200.17 ※ 編輯: siv 來自: 140.114.200.17 (06/25 19:07) ※ 編輯: siv 來自: 140.114.200.17 (06/25 19:09)

06/25 20:31, , 1F
你找位置那邊應該要單獨拉出來算一次
06/25 20:31, 1F

06/25 20:32, , 2F
你都還沒排序好就去找這樣不對
06/25 20:32, 2F

06/25 20:33, , 3F
不對...你只要把35行的&&M[b]==0拿掉就好
06/25 20:33, 3F

06/25 20:36, , 4F
另外你22行是在幹嘛...為什麼還要一個只跑一次的for
06/25 20:36, 4F

06/25 21:02, , 5F
改過得code,重點在37行,已經判斷過得就跳掉
06/25 21:02, 5F

06/25 21:05, , 6F
你原本的code再沒有重複的時候都正常
06/25 21:05, 6F

06/25 21:05, , 7F
你可以觀察一下,你跑第一個0的時候原本是6但在7又
06/25 21:05, 7F

06/25 21:06, , 8F
找到另一個符合的,並且在6跟7都在m裡mark了
06/25 21:06, 8F

06/25 21:06, , 9F
所以第二個0找不到,才會輸出0
06/25 21:06, 9F

06/25 21:07, , 10F
基本上這個錯誤用單布執行應該馬上就找出來
06/25 21:07, 10F

06/25 21:38, , 11F
是的,我在有重複的時候無法只其中mark一個
06/25 21:38, 11F

06/25 21:39, , 12F
所以想請問該採用那種方法來處理重複的問題
06/25 21:39, 12F

06/25 21:39, , 13F
問題有找到,不過無法解決 QQ
06/25 21:39, 13F

06/25 21:42, , 14F
你原本的code沒錯,但要加上break
06/25 21:42, 14F

06/25 21:45, , 15F
請問要加在哪邊 QQ" 不太懂break機制不敢亂用
06/25 21:45, 15F

06/25 21:46, , 16F
break跟continu很像,只是break是剩下的都不做
06/25 21:46, 16F

06/25 21:47, , 17F
continue是這次剩下的不做,但下次的還會做
06/25 21:47, 17F

06/25 21:47, , 18F
找到了 感謝
06/25 21:47, 18F

06/25 21:48, , 19F
因為已經找到相同的了,所以那次的for b都不用做了
06/25 21:48, 19F

06/25 21:48, , 20F
關於continue跟break你可以參考bob sort
06/25 21:48, 20F
文章代碼(AID): #1Fw4O-t9 (C_and_CPP)
文章代碼(AID): #1Fw4O-t9 (C_and_CPP)