黑马程序员技术交流社区
标题:
冒泡排序
[打印本页]
作者:
xfbyxq
时间:
2016-7-6 21:38
标题:
冒泡排序
冒泡排序是通过相邻两个值进行比较,数值大的放到后面,每一轮循环后,最后一个值都是最大值,进行N-1次循环即可
clipboard.png
(241.96 KB, 下载次数: 5)
下载附件
2016-7-6 21:37 上传
总结一句话就是:
连续比较相邻的元素,降序则呼唤。有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