排序问题。

下面的代码,第二个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));

}


fenkapian
浏览 1356回答 3
3回答

我是新手_请多指教

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

qq_青枣工作室_0

这个是冒泡排序。第二个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;     }   } }
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java