精華區beta NTUScout 關於我們 聯絡資訊
※ 引述《JASON (密西根樹貓)》之銘言: : ※ 引述《SmallTACO (*乖者違背常理也*)》之銘言: : : numbers[j]=numbers[j-1]; : 妳確定這一行可以把兩個element調換嗎? : 照妳的演算法 如果抓到的那一項剛好是最小的 : 那所有的資料都會被蓋掉耶....^^: int rr; for(i=1;i<320*320;i++) { j=i; rr=numbers[i]; do { numbers[j]=numbers[j-1]; j=j-1; if(j==0) break; }while(rr<=numbers[j-1]); numbers[j]=rr; } 這個方法是先將前面的比較大的數字搬到後面來... 再將後面較小的數字放到前面... 假如沒寫錯的話... 應該後面的不會比前面的數字小... 假設已經進行到第6項進行檢查... 6 7 8 8 9 3 j=i (=5) rr=numbers[5] (=3) rr<=numbers[4] 條件成立 numbers[5]=numbers[4]=9 j=j-1 (=4) j != 0 rr<numbers[3] 條件成立 numbers[4]=numbers[3]=8 j=j-1 (=3) j != 0 rr<=numbers[2] 條件成立 numbers[3]=numbers[2]=8 j=j-1 (=2) j != 0 rr<=numbers[1] 條件成立 numbers[2]=numbers[1]=7 j=j-1 (=1) j != 0 rr<=numbers[0] 條件成立 numbers[1]=numbers[0]=6 j=j-1 (=0) j == 0 故 break numbers[0]=rr=3 因此數字變成 3 6 7 8 8 9 應該沒有錯啊... 不過執行結果還是在最後出現致命的弱點... 到底是為什麼呢... ><~ -- 錢多事少離家近 位高權重責任輕 每日睡到自然醒 薪水領到手抽筋 逢年過節拿獎金 別人加班我加薪 秘書妖豔員工齊 有禍歸人功歸己 歐美亞非加南極 出差旅遊任我行