关于冒泡排序的问题

来源: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”也是用于控制循环次数的,使用等于号也是可以的,但是最后一次也没有进行元素的调整。

祝学习愉快~

0

0 学习 · 9886 问题

查看课程