作者SmallTACO (*乖者违背常理也*)
站内NTUScout
标题Re: [问题] 排序法...
时间Thu Nov 1 22:32:11 2001
※ 引述《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
应该没有错啊...
不过执行结果还是在最後出现致命的弱点...
到底是为什麽呢... ><~
--
钱多事少离家近 位高权重责任轻
每日睡到自然醒 薪水领到手抽筋
逢年过节拿奖金 别人加班我加薪
秘书妖艳员工齐 有祸归人功归己
欧美亚非加南极 出差旅游任我行