基本思想:对排序数列从前向后,依次比较相邻元素的值,逐渐将较大的值从前向后移动,移到尾部。如水底下的气泡一样逐渐向上冒
注:因为排序过程仲,各元素不断接近自己位置,如果一次循环结束后没发生交换,就说明排列有序。因此要在排序过程仲设置一个标志flag判断元素是否进行过交换,从而提高效率。
代码:
import java.util.Arrays;
public class BubbleSort {
public static void main(String[] args) {
int arr[]={1,88,5,66,2,57};
//冒泡排序。时间复杂度O(n2)
int temp=0;
boolean flag=false;
for (int i=0;i<arr.length-1;i++){
for (int j=0;j<arr.length-1-i;j++){
//如果前面的数比后面的大 交换顺序
if (arr[j]>arr[j+1]){
flag=true;
temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
System.out.println("第"+(i+1)+"次排序后的数组");
System.out.println(Arrays.toString(arr));
//如果第一遍循环发现已经是排好的,就不用在进行循环判断
if (!flag){
break;
}else {
flag=false;//上次循环结束,发生了交换,则重置flag,进行下次判断
}
}
System.out.println("-----------------------------------------------------");
System.out.println("最终排序后的数组");
System.out.println(Arrays.toString(arr));
}
}