介绍
基本思想:两个数比较大小,较大的数下沉,较小的数冒起来。冒泡排序是一个稳定的排序算法
过程:
1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
2. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。
3. 针对所有的元素重复以上的步骤,除了最后一个。
4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
优化:
如果在一趟排序的过程中没有发生交换,则说明已经排好序了,因此可以在排序的过程中立一个flag来判断这一趟排序是否发生元素交换,如果没有则说明已经排好序了,退出循环,减少不必要的比较。
图解冒泡排序
平均时间复杂度:O(n2)
实现代码
public class BubbleSort {
public static int[] bubbleSort(int[] sourceArray) {
//对原有的数组进行拷贝
int[] arr = Arrays.copyOf(sourceArray, sourceArray.length);
//定义一个boolean变量用来表示此次循环是否已经发生了交换,如果没有发生交换,表示排序完成,退出循环
boolean flag ;
//定义一个临时变量,用于后面的交换
int temp;
for (int i = 0; i < arr.length-1; i++) {
flag = true;
for (int j = 0; j < arr.length -1- i; j++) {
if (arr[j] > arr[j + 1]) {
temp = arr[j + 1];
arr[j + 1] = arr[j];
arr[j] = temp;
flag = false;
}
}
//判断此次是否发生交换
if(flag){
break;
}
}
return arr;
}
public static void main(String[] args) {
int arr[] = {3,7,2,4,5};
System.out.println("排序前:"+Arrays.toString(arr));
System.out.println("----------------------");
int[] arr1 = bubbleSort(arr);
System.out.println("排序后:"+Arrays.toString(arr1));
}
}