基础算法(1):冒泡排序

冒泡排序 是一种比较简单的排序算法,其本质是相邻的两个元素进行大小比较,最终使得所有的元素形成从小到大或者从大到小的排列

算法原理

  1. 比较相邻的元素,不相等,就进行交换
  2. 对所有的相邻元素进行第1步的操作,第一轮比较下来,最大(小) 的元素排在了最尾部
  3. 相邻的元素比较的次数在上一轮比较的基础上减去1次,进入下一轮的比较,,重复第1,2步
  4. 最大(小),第二大(小),第三大(小)......的元素依次会拍到元素的最尾部
  5. 当比较次数为1的时候,执行完第1步,所有比较结束

冒泡排序是一种稳定的排序算法

代码示例

<?php

function bubbing_sort(array $arr)
{
    // 统计需要排序的元素个数
    $len = count($arr);
    // 控制进行几轮比较
    for($j = 1; $j < $len ;$j++)
    {
        // 相邻的一组元素,两两之间需要比较的次数
        for($i = 0 ; $i < $len-$j ;$i++)
        {
            // 元素的排列方向 从小到大或者从大到小
            if($arr[$i] > $arr[$i+1])
            {
                // 相邻的两个元素大小比较符合条件,两两交换位置
                $temp = $arr[$i];
                $arr[$i] = $arr[$i+1];
                $arr[$i+1] = $temp ;
            }
        }
    }
    return $arr ;
}
$arr = [99,10,88,23,13,67];
var_dump(bubbing_sort($arr));
// output
/*array (size=6)
  0 => int 10
  1 => int 13
  2 => int 23
  3 => int 67
  4 => int 88
  5 => int 99*/

冒泡排序的核心是相邻元素之间的两两比较,比较完一轮,还有元素没有比较完,进入下一轮的比较,直到所有的元素都按照一定的顺序呈现出来.

PS : 要是没有直观的感受,可以裁剪出几个小纸片,每个小纸片上写上数字(相当于一个元素),将这些小纸片放在一块按照冒泡排序实现思路进行比较.

猜你喜欢

转载自blog.51cto.com/11845347/2169243
今日推荐