您的位置:首页 > 编程语言 > Java开发

[排序算法]——冒泡排序

2016-03-20 13:00 260 查看


冒泡排序

 
 冒泡排序(Bubble Sort)是我学习的第一个排序算法,实现方法比较简单。它运用两层 for 循环,里层循环判断相邻两个元素的顺序是否与预定顺序相反,如果是,就将两个元素交换,外层循环一次,就能将数组中剩下的元素中最小的元素“浮”到最前面。

    一般地,对n个元素进行冒泡排序,总共需要进行n-1趟。第1趟需要比较n-1次,第2趟需要比较n-2次,......第i趟需要比较n-i次。最好的情况需要比较n-1次,最坏的情况需要比较n(n-1)/2次。

   基础代码是这样的: 

public static void bubbleSort(int[] arr){
for(int j=0;j<arr.length-1;j++){//控制趟数
for (int i = 0; i <arr.length-1-j; i++) {//控制次数
if (arr[i]>arr[i+1]) {//控制升降序
int temp=arr[i];
arr[i]=arr[i+1];
arr[i+1]=temp;
}
}
}
}
   每排列一个数组对象,程序都要运行n(n-1)/2次,即使在运行中途序列已经排好,也会运行剩余的循环,这就降低了程序的效率。

   考虑排序这个数组int[] arr={57,68,69,78},它和既定的顺序是一致的,如果按照上述代码需n(n-1)/2次排序。其实当某趟排序没有改变原有元素的顺序时,排序已经完成,就可以结束循环。
public static void bubbleSort(int[] arr){
boolean sorted=true;//是否排列完成,假定已排好
for(int j=0;j<arr.length-1;j++){//控制趟数
sorted=true;//每趟前假定有序
for (int i = 0; i <arr.length-1-j; i++) {//控制次数
if (arr[i]>arr[i+1]) {
int temp=arr[i];
arr[i]=arr[i+1];
arr[i+1]=temp;
sorted=false;//如果与既定顺序相反,则进入if语句,假定失败
}
}
if (sorted) {//如果次趟之后与既定顺序相通,则没有进入if语句,sorted为true。
break;
}
}
}
   可以像这样把数组打印出来:
System.out.println(Arrays.toString(arr));




内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息