冒了个泡

没事写个冒泡玩玩,冒泡的基本原理(我这从后往前比较):

(1) 依次比较相邻的数,把大的或者小的数丢到后面(我这里按从小到大排序,> 把大的数放后头)。这样一次循环会把最小的数字排序到最左边。
(2)再对剩下的数字进行一次相同的操作,这样把第二小的数字放在第二个位>
置,一次做n-1次循环,就能把数字从小到大排好序。
(3)当如果入参的数组里,数字的一开始就有一定的顺序,比如 1、2、4、3、5、6,排序就只需要把4和3换个顺序,所以可以记录一个标志位,当没有需要更> 换位置时候,就可以退出遍历,这样只进行了11次循环,详见代码。

排序代码:

function bubbleSort(array $array)
{
    if ( ! is_array($array) || count($array) == 0) {
        return 'invalid input';
    }

    $len = count($array);

    if ($len == 1) {
        return $array;
    }

    //记录是否已经排好顺序
    $isOK = true;

    for ($i = 0; ($i < $len - 1) && $isOK; $i++) {
        $isOK = false;
        for ($j = $len - 2; $j >= $i; $j--) {
            if ($array[$j] > $array[$j + 1]) { //判断当前相邻数字大小
                //交换顺序
                $array[$j + 1] = $array[$j] + $array[$j + 1];
                $array[$j] = $array[$j + 1] - $array[$j];
                $array[$j + 1] = $array[$j + 1] - $array[$j];
                $isOK = true;
            }
        }
        //输出本次排序的结果
        echo '第' . ($i + 1) . '次排序结果:' . implode(",", $array) . "\n";
    }

    return $array;
}

$sort = array(1, 3, 2, 8, 3, 1, 100, 82, 21, 0, -1, 23);
//$sort = array(1, 2, 5, 4, 6, 7, 8);
$res = bubbleSort($sort);
echo "排序结果:" . implode(",", $res) . "\n";

输出结果:

bubbleSort.jpg

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部...
    蚁前阅读 5,222评论 0 52
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,767评论 18 399
  • 概述:排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部...
    每天刷两次牙阅读 3,746评论 0 15
  • 1.插入排序—直接插入排序(Straight Insertion Sort) 基本思想: 将一个记录插入到已排序好...
    依依玖玥阅读 1,285评论 0 2
  • 今天磁性的目的和红天行者的探索,指引你拓展个人生命空间,感受自己并非只能是固定的样子,可以拥有不同维度、多种频率的...
    艾人家家Aileen_LiLi阅读 359评论 0 0