冒泡排序为什么内层循环要-i?

来源:4-1 冒泡排序

铜雀春深7748616

2021-07-15 12:50:51

相关代码:

		for(int i=0;i<a.length-1;i++) {
for(int j=0;j<a.length-1;j++) {
if(a[j]>a[j+1]) {
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}

问题描述:

内层循环这里我写的是

j<a.length-1

而老师视频里写的是

j<a.length-i-1

两个都能正确的实现排序,我想知道老师的代码里为什么要-i?

写回答

1回答

好帮手慕小小

2021-07-15

同学你好,两种方式都是可以实现,但是j<a.length-i-1会提高代码运行效率,避免数据间不必要的比较。

每一轮比较之后都会冒出来一个数,j<a.length-1每一轮都会与全部的数据从头比到尾,而j<a.length-i-1每轮则是与未冒出来的数据进行比较,冒出来的数不在进行比较。

http://img.mukewang.com/climg/60efd9a5093a07c109350553.jpg

同学可使用如下代码测试对比两者在比较次数上的区别:

int[] a = {1,65,84,36,28,16,34,80,8};
int temp;
int count=0;//记录比较的次数
for (int i = 0; i < a.length - 1; i++) {
// for (int j = 0; j < a.length - 1; j++) {
for (int j = 0; j < a.length -i- 1; j++) {
count++;
if (a[j] > a[j + 1]) {
temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
System.out.println(count);//一共比较的次数
System.out.println(Arrays.toString(a));

祝学习愉快~


3

0 学习 · 9886 问题

查看课程