※ 引述《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
應該沒有錯啊...
不過執行結果還是在最後出現致命的弱點...
到底是為什麼呢... ><~
--
錢多事少離家近 位高權重責任輕
每日睡到自然醒 薪水領到手抽筋
逢年過節拿獎金 別人加班我加薪
秘書妖豔員工齊 有禍歸人功歸己
歐美亞非加南極 出差旅遊任我行