关于冒泡排序的问题
来源:4-1 冒泡排序
爪哇小菜鸟
2023-01-28 23:15:32
package com.imooc.array; public class SortDemo { public static void main(String[] args) { //冒泡排序 int[] a= {9,13,4,56,27}; System.out.println("排序前的数组顺序:"); for(int n:a) { System.out.print(n+" "); } System.out.println(); int temp; //外重循环表示整个比较循环的次数 for(int i=0;i<a.length-1;i++) { //内重循环表示每次循环,数组内的比较 for(int j=0;j<a.length-i-1;j++) { if(a[j]>a[j+1]) { temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; } } } System.out.println("排序后数组顺序为:"); for(int n:a) { System.out.print(n+" "); } } }
问题描述:
老师您好,外重循环和内重循环的原理我大概明白了,但是有一些细节的问题想不明白,
第一个,外重循环控制整个比较的循环次数,那么按理说不是应该从第一次循环开始吗,那为什么是i=0,而不是i=1;
第二个,外重循环用数组长度减一控制循环次数,那么为什么是i<a.length-1,而不是小于等于,我尝试过把小于换成小于等于,对结果没有影响;
另外,内层循环的字母" j "我的理解是数组的下标,所以" j "可以从零开始,然后每次循环比上一次循环少比较一次,所以"-i",但是为什么是j<a.length-1-i;而不是小于等于,是因为下面有a[j+1]吗
1回答
好帮手慕小蓝
2023-01-29
同学你好,老师对同学的三个疑问分别进行回答:
1.同学疑问的位置只是计数器,从0开始和从1开始都是可以的,甚至从任意数字开始都是没问题的。这里的主要作用是用于控制循环执行的次数,只要次数正确,从多少开始都是可以的,只不过更习惯从0开始。
2.外层循环多执行一次,甚至多执行多次都不会对结果产出影响,因为在这之前排序已经完成了,后面的次数并不会对元素的位置再进行调整。课程中的循环次数是最少的次数,以保证程序效率的最大化。
3.内层循环中的“j”确实也是用于表示数组下标的,同上面一点,“j<a.length-i-1”也是用于控制循环次数的,使用等于号也是可以的,但是最后一次也没有进行元素的调整。
祝学习愉快~
相似问题