算法原理:

S1:从待排序序列的起始位置开始,从前往后依次比较各个位置和其后一位置的大小并执行S2。
S2:如果当前位置的值大于其后一位置的值,就把他俩的值交换(完成一次全序列比较后,序列最后位置的值即此序列最大值,所以其不需要再参与冒泡)。
S3:将序列的最后位置从待排序序列中移除。若移除后的待排序序列不为空则继续执行S1,否则冒泡结束。

算法实现(Java):

基础实现:

public static void bubbleSort(int[] array) {
    int len = array.length;
    for (int i = 0; i < len; i++) {
        for (int j = 0; j < len - i - 1; j++) {
            if (array[j] > array[j + 1]) {
                int temp = array[j + 1];
                array[j + 1] = array[j];
                array[j] = temp;
            }
        }
    }
}

优化:若某一趟排序中未进行一次交换,则排序结束

public static void bubbleSort(int[] array) {
    int len = array.length;
    boolean flag = true;
    while (flag) {
        flag = false;
        for (int i = 0; i < len - 1; i++) {
            if (array[i] > array[i + 1]) {
                int temp = array[i + 1];
                array[i + 1] = array[j];
                array[i] = temp;
                flag = true;
            }
        }
        len--;
    }
}

php

function bubbleSort($arr) {
    $lenght = count($arr);
    for ($i = 0; $i < $lenght; $i++) {
        for ($j = $i; $j < $lenght; $j++) {
            if ($arr[$i] < $arr[$j]) {
                $temp = $arr[$i];
                $arr[$i] = $arr[$j];
                $arr[$j] = $temp;
            }
        }
    }
    return $arr;
}
//优化
function bubbleSort1($arr) {
    $lenght = count($arr);
    for ($i = 0; $i < $lenght; $i++) {
        $flag = false;
        for ($j = $i; $j < $lenght; $j++) {
            if ($arr[$i] < $arr[$j]) {
                $temp = $arr[$i];
                $arr[$i] = $arr[$j];
                $arr[$j] = $temp;
                $flag = true;
            }
        }
        if ($flag == false) {
            break;
        }
    }
    return $arr;
}

function bubbleSort(&$arr) {
    $length = count($arr);
    $flag = true;
    while ($flag) {
        $flag = false;
        for ($i = 0; $i < $length - 1; $i++) {
            // 正序
            // if ($arr[$i] > $arr[$i + 1]) {
            // 倒序
            if ($arr[$i] < $arr[$i + 1]) {
                $temp = $arr[$i + 1];
                $arr[$i + 1] = $arr[$i];
                $arr[$i] = $temp;
                $flag = true;
            }
        }
        //if ($flag == false) {
        //    break;
        //}
        $length--;
    }
}