根据维基百科的定义:
冒泡排序(英语:Bubble Sort)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。
冒泡排序算法的思路如下:
(1)比较相邻元素。如果前者比第二个大,那就交换它们的位置。
(2) 对每对相邻元素执行相同的操作,从第一对开始到最后一对结束。完成后,最后一个元素将是最大的数字,这里就是一趟。
(3)对除最后一个元素之外(已最大,无需比较)的所有元素重复上述步骤。每一趟都能确定一个数(相对于每一趟的最
后一个元素),重复上面的步骤,直到没有可以比较的数字对。
时间复杂度:
O(n^2)
空间复杂度:
O(1)
Java代码实现:
public class BubbleSort {
public static void bubbleSort(int[] arr){
if(arr == null || arr.length < 2){//如果数组为空或者元素个数少于2
return;
}
for (int end = arr.length - 1; end > 0; end--){//确定第end个之前需要排序
for (int i = 0; i <end; i++){ //i确定i ~ end需要相互交换
if(arr[i] > arr[i+1]){
swap(arr,i,i+1);
}
}
}
}
//交换
private static void swap(int[] arr, int a, int b) {
arr[a] = arr[a] ^ arr[b];
arr[b] = arr[a] ^ arr[b];
arr[a] = arr[a] ^ arr[b];
}
public static void main(String[] args) {
int[] arr = new int[]{3,6,4,2,11,10,5};
bubbleSort(arr);
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");//2 3 4 5 6 10 11
}
}
}
过程简图:
优缺点:
算法实现简单容易理解,但是,对于包含大量的元素的数列排序效率很低。在最坏的情况,冒泡排序需要{\displaystyle O(n^{2})}次交换,而插入排序只要最多{\displaystyle O(n)}交换。