冒泡排序

发布日期:2017-04-14 阅读量:414

一、原理

  1. 1、比较相邻的元素。如果第一个比第二个大,就交换他们两个。
  2. 2、对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
  3. 3、针对所有的元素重复以上的步骤,除了最后一个。
  4. 4、持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

二、实现

    1. PHP

function bubbleSort($data)
{
    if (!is_array($data)) { // 判断是否是数组, 执行1次
        return [];
    }
    $n = count($data);
    if ($n <= 0) { // 如果长度小于0则返回空数组,执行1次
        return [];
    }
    
    for($i = 0; $i < $n - 1; $i++) { // 比较轮数,执行n次
        for($j = 0; $j < $n - $i - 1; $j++) { // 比较次数, (n-1)+(n-2)+...+1次
            if ($data[$j] > $data[$j + 1]) { // 如果前一个数大于后一个数则交换位置
                $temp = $data[$j];
                $data[$j] = $data[$j + 1];
                $data[$j + 1] = $temp;
            }
        }
    }
    return $data;
}

    2. javascript

function bubbleSort(arr)
{
    let i = arr.length, j;
    while (i > 0) {
        for (j = 0; j < i - 1; j++) {
            if (arr[j] > arr[j + 1]) {
                let temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
        i--;
    }
    return arr;
}

三、时间复杂度

时间复杂度计算为: 1 + 1 + ( n * ( n - 1 ))  / 2

最终时间复杂度为:O(n^2)