有关冒泡排序的问题

C++语言 码拜 8年前 (2016-04-03) 821次浏览
// 冒泡,不断比较相邻的两个数,假如顺序错了,那么就交换
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]

20

题主本人弄几个数,然后纸上写一下就明白了。
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;
        }

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明有关冒泡排序的问题
喜欢 (0)
[1034331897@qq.com]
分享 (0)