// 冒泡,不断比较相邻的两个数,假如顺序错了,那么就交换
for (int i = 0; i < n – 1; i++) {
for (int j = 1; j < n – i; j++) {
if (a[j – 1] > a[j]) {
int temp = a[j];
a[j] = a[j – 1];
a[j – 1] = temp;
}
}
}
该段代码没有遍历到最后一位啊
for (int i = 0; i < n – 1; i++) {
for (int j = 1; j < n – i; j++) {
if (a[j – 1] > a[j]) {
int temp = a[j];
a[j] = a[j – 1];
a[j – 1] = temp;
}
}
}
该段代码没有遍历到最后一位啊
解决方案
20
数组是从0到n-1的,遍历到了啊!
10
n是元素个数吧,那就正好啊,下标的范围是0到n-1
i=0时
j=1,比较的是a[0]和a[1]
j=n-i-1=n-1,比较的是a[n-2]和a[n-1]
i=n-2时
j=1和j=n-i-1=1相同,即只比较a[0]和a[1]
i=0时
j=1,比较的是a[0]和a[1]
j=n-i-1=n-1,比较的是a[n-2]和a[n-1]
i=n-2时
j=1和j=n-i-1=1相同,即只比较a[0]和a[1]
20
题主本人弄几个数,然后纸上写一下就明白了。
n个数的话,第一轮的比较,只要比较n-1次,而不是n次
n个数的话,第一轮的比较,只要比较n-1次,而不是n次
20
for(i=0;i<n-1;i++) for(j=0;j<n-1-i;j++) if(a[j]>a[j+1]){ temp=a[j+1]; a[j+1]=a[j]; a[j]=temp; }