int a[]={49,38,65,97,76,13,27,49,78,34,12,64,5,4,62,99,98,54,56,17,18,23,34,15,35,25,53,51};
int temp=0;
for(int i=0;i<a.length-1;i++){
for(int j=0;j<a.length-1-i;j++){
if(a[j]>a[j+1]){
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}length减一什么意思呢
4 回答
已采纳
gallonyin
TA贡献1条经验 获得超0个赞
如果没看错这应该是冒泡排序,因为计算机是顺序执行的,所以我们可以分解来看,只看 i = 0 的时候
i = 0, j 的循环是 0 到 length - 1 - 0
也就是说在这次循环中要做一下判断 a[0] > a[1] 那么交换 a[1] > a[2] 那么交换 ........ a[length - 1] > a[length] 那么交换
到此,可以保证一点:a[length] 一定是该数组中的最大值
第二步 i = 1, j 的循环是 0 到 length - 1 - 1
也就是判断 a[0] > a[1] 交换 a[1] > a[2] 交换 ...... a[length - 2] > a[length -1] 交换
到此,可以保证: a[length - 1] 一定是该数组中的最大值 (a[length]已经被排除在外)
第三步 i = ...
结束后的数组就是 从小到大顺序排列了
如果没思路就动手照着计算机的执行顺序写一写
qq_在迷宫_0
TA贡献4条经验 获得超1个赞
打印一下数组的长度,数组长度是里面存放的数据的个数的,而里面数据的索引是从0开始的,索引到最后一个是数据的个数-1,你数数是从1开始数的嘛,然而索引从0开始的,所以要减一咯
添加回答
举报
0/150
提交
取消