PHP 实现冒泡排序

栏目: PHP · 发布时间: 7年前

内容简介:冒泡排序是相对比较简单、常用的算法,同时在面试中也是最常被问到的问题。自认能力不够,不能有更深的理解,下面就把一些资料中的内容记录下来,文末有原文链接。以上是维基百科中的介绍,可以看到,原理并不复杂。但是在数据量大时,不是一个很好的选择。需要注意的是,下图与实例中的代码,顺序是相反的。

导语

冒泡 排序 是相对比较简单、常用的算法,同时在面试中也是最常被问到的问题。自认能力不够,不能有更深的理解,下面就把一些资料中的内容记录下来,文末有原文链接。

冒泡排序

冒泡排序(英语: Bubble Sort )是一种简单的 排序算法 。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。

冒泡排序对 n 个项目需要 O(n 2 ) 的比较次数,且可以 原地 排序。尽管这个算法是最简单了解和实现的 排序算法 之一,但它对于包含大量的元素的数列排序是很没有效率的。

冒泡排序算法的运作如下:

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

以上是维基百科中的介绍,可以看到,原理并不复杂。但是在数据量大时,不是一个很好的选择。

动图演示

需要注意的是,下图与实例中的代码,顺序是相反的。

PHP 实现冒泡排序

PHP 实现冒泡排序

实例

<?php

$arr = [33, 24, 8, 21, 2, 23, 3, 32, 16];

function bubbleSort($arr)
{
    if (!is_array($arr)) {
        return false;
    }

    $count = count($arr);

    if ($count < 2) {
        return $arr;
    }

    for ($i = 0; $i < $count; $i++) {
        for ($k = $i + 1; $k < $count; $k++) {
            // $arr[$i] 和 $arr[$k] 是相邻的两个值
            if ($arr[$i] > $arr[$k]) {
                // 前者大于后者,调换位置
                // 如果想要按照从大到小进行排序,改为 $arr[$i] < $arr[$k]
                $temp = $arr[$i];
                $arr[$i] = $arr[$k];
                $arr[$k] = $temp;
            }
        }
    }

    return $arr;
}

print_r(bubbleSort($arr));
// Array ( [0] => 2 [1] => 3 [2] => 8 [3] => 16 [4] => 21 [5] => 23 [6] => 24 [7] => 32 [8] => 33 )

参考资料: 冒泡排序PHP冒泡排序(Bubble Sort)算法详解GIF演示排序算法


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

The Intersectional Internet

The Intersectional Internet

Safiya Umoja Noble、Brendesha M. Tynes / Peter Lang Publishing / 2016

From race, sex, class, and culture, the multidisciplinary field of Internet studies needs theoretical and methodological approaches that allow us to question the organization of social relations that ......一起来看看 《The Intersectional Internet》 这本书的介绍吧!

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具