普通的冒泡排序法伪代码如下,
BUBBLESORT(A)
1 for i ← 1 to length[A]
2 do for j ← length[A] downto i + 1
3 do if A[j] < A[j - 1]
4 then exchange A[j] ↔ A[j - 1]
最佳情况和最坏情况都是θ(n^2);
但是如果在算法中加入didSwap标记
如果循环没有进行交换,可以理解为数组已经排好序,同时退出排序;
此时最佳情况为数组本来就按要求排好序,只需要θ(n)就可以结束算法;
public void bubbleSort(int arr[]) { boolean didSwap; for(int i = 0, len = arr.length; i < len - 1; i++) { didSwap = false; for(int j = 0; j < len - i - 1; j++) { if(arr[j + 1] < arr[j]) { swap(arr, j, j + 1); didSwap = true; } } if(didSwap == false) return; } }