记录一下,该有的注释都有了
package com.algorithm.sort;
import java.util.Arrays;
/**
* 冒泡排序
*
*/
public class Bubble {
public static void main(String[] args) {
int[] arr={6,5,4,3,2,1};
solution(arr);
System.out.println( Arrays.toString(arr));
}
public static void solution(int[] a){
//边界条件
if(a==null || a.length<2){
return;
}
for(int i=a.length-1;i>0;i--){ //需要比较的轮数
for(int j=0;j<i;j++){ //每轮需要比较的次数
if(a[j]>a[j+1]) //若前一个数大于后一个数
swap(a,j,j+1); //则交换两个数
}
}
}
//交换两个数
private static void swap(int[] arr,int i,int j) {
int temp =arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
}
不足:在上面实现的代码中,即使n个数本来就是有序的,也会进行(n-1)次排序
优化:当某趟没有发生交换,说明数组已经有序,就中断程序
//改进
for(int i=a.length-1;i>0;i--){
boolean flag=false;
for(int j=0;j<i;j++){
if(a[j]>a[j+1]){
swap(a,j,j+1);
flag=true;
}
}
if(!flag)
break;
}