A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© xfbyxq 中级黑马   /  2016-7-6 21:38  /  310 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

冒泡排序是通过相邻两个值进行比较,数值大的放到后面,每一轮循环后,最后一个值都是最大值,进行N-1次循环即可


总结一句话就是:连续比较相邻的元素,降序则呼唤。有n个数,共需要比较n-1趟,第i趟,需要比较n-i次。

int n=sorted.length;
for(int i=1;i<n;i++){//进行n-1次遍历
    for(int j=0;j<n-i;j++){//-i次是因为后面的数值都是排序好的
        if(sorted[j]>sorted[j+1]){
            int temp=sorted[j];
            sorted[j]=sorted[j+1];
            sorted[j+1]=temp;
        }
    }
}


如果数组本身顺序不是很乱,用上面的方法会做无用功。可能只需要进行1-3次就排序好了,用了上面的方法就一定会执行n-1次循环
可以这样改进
思路:如果当第I次循环已经排好序就让它跳出循环即可
int n=sorted.length;
boolean isTrue=true;
for(int i=1;i<n&&isTrue;i++){//进行n-1次遍历

    isTrue=false;
    for(int j=0;j<n-i;j++){//-i次是因为后面的数值都是排序好的
       //当第I次循环后都不执行下面的语句,isTrue=false了,也就是说数组以排序好了,
         if(sorted[j]>sorted[j+1]){
            int temp=sorted[j];
            sorted[j]=sorted[j+1];
            sorted[j+1]=temp;
            isTrue=true;
        }
    }
}



0 个回复

您需要登录后才可以回帖 登录 | 加入黑马