冒泡排序为什么内层循环要-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回答
同学你好,两种方式都是可以实现,但是j<a.length-i-1会提高代码运行效率,避免数据间不必要的比较。
每一轮比较之后都会冒出来一个数,j<a.length-1每一轮都会与全部的数据从头比到尾,而j<a.length-i-1每轮则是与未冒出来的数据进行比较,冒出来的数不在进行比较。
同学可使用如下代码测试对比两者在比较次数上的区别:
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));
祝学习愉快~
相似问题