c# 冒泡排序里 内层循环的 n-1-i 怎么理解

// 将最大的元素交换到最后
for(j = 0;j < score.length-1-i;j++)

首先,java的数组下标是从0开始,所以如果你有10个数组项,就只能到9,所以
score.length-1知道吧,就这个道理,

其次,-i的意思是这样的,外层循环做了多少次,就已经有多少项已经冒到最后了,对于它们,不用再去比较了,这个-i的作用就是避免再对已经冒到最后的项再比较一次,已经冒到最后的那些顶,你比较也好,不比较也好,都是一样的结果,为了效率,是不用比较的
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-08-21
之所以要数组的长度减一,是因为数组是从0开始的,比如说一个数组有7个元素,它的长度为7,分别为
a[0],a[1],a[2],a[3]a[4],a[5],a[6]这7个所以当你要取数组中最后一个a[6]时是需要用长度减1的
而为什么要减i呢,则是因为你的冒泡排序是把最大的放到最后一位,比如第一次循环的时候进行排序完,最后一位是最大的了,根本没有必要在第二次循环当中把他在拿去比大小了吧,并且如果不减i的话,只能排出最大一位(可以用来进行求数组中最大的值),以此类推……
第2个回答  2013-08-21
for i:=1 to n do a1:=0语句是错误的,应该下面这样:
for i:=1 to n do a1[i]:=0

因为var a1:array[1..50] of integer;的定义a1是一个有50个元素的数组,这50个元素分别用a1[1]、a1[2]、a1[3]、……、a1[50]来表示,而 for i:=1 to n do 语句;的功能是i分别为1~50执行一次这个语句。

补充:
不要盲目相信权威,开动脑筋。