黑马程序员技术交流社区

标题: 冒泡排序 [打印本页]

作者: xfbyxq    时间: 2016-7-6 21:38
标题: 冒泡排序
冒泡排序是通过相邻两个值进行比较,数值大的放到后面,每一轮循环后,最后一个值都是最大值,进行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;
        }
    }
}








欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2