为了账号安全,请及时绑定邮箱和手机立即绑定

排序问题。

排序问题。

fenkapian 2017-04-20 22:55:53
下面的代码,第二个if判断是干嘛的啊,麻烦解读下public static void main(String[] args) { int [] arr = {23,14,1,22,9}; int size = arr.length - 1; for(int  i = 0; i < size; i++) { if (arr[i] > arr[i + 1]) { int temp = arr[i]; arr[i] = arr[i + 1]; arr[i + 1] = temp; } if (i == size -1) { i = -1; size--; } } System.out.println(Arrays.toString(arr)); }
查看完整描述

3 回答

已采纳
?
我是新手_请多指教

TA贡献140条经验 获得超79个赞

因为第一整轮排序只能确定所有数字里最大的数,经过前后比较交换完后就只是把23移到最后,那么前面的顺序还是14,1,22,9还没排好。那第二次排序if(i==size-1)这是判断第一整轮循环比较只要等于最后一次比较的时候,由于要进行第二轮排序,此时i=-1是加1后能正常第二轮循环,那么第二轮最后一个数字就不要在参加前面的比较了,因此比较的次数要减1,size--;第三轮以此类推

查看完整回答
反对 回复 2017-04-21
?
qq_青枣工作室_0

TA贡献446条经验 获得超754个赞

这个是冒泡排序。

第二个if是用来重新开始的。当i到了size-1时,把i=-1,然后循环继续i++,那么i就等于0了(重新开始)。另外,还用了size--,是用来减少for循环判断i<size里的size。

相当于下面的正常写法:

for(int i=0;i<size;i++){
    for(int j=0;j<size-i;j++){
        if(arr[j]>arr[j+1]){
        int temp=arr[j];
      arr[j]=arr[j+1];
      arr[j+1]=temp;
    }
  }
}
查看完整回答
2 反对 回复 2017-04-21
  • 3 回答
  • 1 关注
  • 1355 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信