基本思想
对当前还未排好序的范围内的全部数,自上而下对相邻的俩个数依次进行比较和调整,让较大的数下沉,较小的数往上冒。即:每当俩相邻的数比较后发现他们的排序与排序的要求相反时,就将他们交换。每次遍历都可确定一个最大值放到待排数组的末尾,下次遍历,对该最大值以及它之后的元素不再排序(已经排好)。
由于冒泡排序算法交换和比较的操作次数都与N2成正比,由于在大O表示法中,常数忽略不计,冒泡排序的时间复杂度为O(N2)。O(N2)的时间复杂度是一个比较糟糕的结果,尤其在数据量很大的情况下。所以冒泡排序通常不会用于实际应用。
冒泡排序算法相比于其他排序算法的唯一显著优势是可以检测输入序列是否已经是排序的。
Java版本实现
public class BubbleSort1<T extends Comparable<T>> extends Sort<T> {
@Override
public void sort(T[] nums) {
int n = nums.length;
boolean isSorted = false;
for (int i = 0; i < n - 1 && !isSorted; i++) {
isSorted = true;
for (int j = 1; j < n - i; j++) {
if (less(nums[j], nums[j - 1])) {
swap(nums, j, j - 1)