zoukankan      html  css  js  c++  java
  • PHP冒泡排序

    这个应该是最大众的排序了。也算是简单排序算法中知名度最高的。

    冒泡排序的思路是怎么样的呢?

    首先就是先比较相邻的两个元素,如果满足条件,就交换,否则不动。

    然后是再比较接下来的两个相邻的元素,然后满足条件就交换,否则依然不动。

    依次循环操作下去,最终一个元素,会固定在最下边。

    举例:

    数组有5个元素从小到大排序,首先第一个和第二个比,第一个比第二个大,就交换,否则不操作

    然后第二个和第三个比较,第二个大于第三个则交换,否则依然不动。直到对比到第四个和第五个对比。

    经过一轮的循环对比,最大的数字就下沉到最下边了。小的数字逐渐向上浮出。

     1 // 冒泡排序
     2 function bubble_sort($arr)
     3 {
     4     $len = count($arr);
     5     for ($i = 0; $i < $len -1; $i++) {//循环对比的轮数
     6         for ($j = 0; $j < $len - $i - 1; $j++) {//当前轮相邻元素循环对比
     7             if ($arr[$j] > $arr[$j + 1]) {//如果前边的大于后边的
     8                 $tmp = $arr[$j];//交换数据
     9                 $arr[$j] = $arr[$j + 1];
    10                 $arr[$j + 1] = $tmp;
    11             }
    12         }
    13     }
    14     return $arr;
    15 }
    16 $arr = [5,2,4,7,9,4,2,6,8,3];
    17 print_r(bubble_sort($arr));

    以上代码呢,是标准的冒泡排序,代码实现也完全符合冒泡排序的说法。

    但是,在实际上,有很多人把冒泡排序写成了另一种样子。

     1 //排序
     2 function paixu($arr)
     3 {
     4     $len = count($arr);
     5     for ($i = 0; $i < $len - 1; $i++) {//循环比对的轮数
     6         for ($j = $i + 1; $j < $len; $j++) {//从第二个开始循环,循环到最后一个,逐一和第一个比较
     7             if ($arr[$i] > $arr[$j]) {//前边大于后边的则交换
     8                 $tmp = $arr[$i];
     9                 $arr[$i] = $arr[$j];
    10                 $arr[$j] = $tmp;
    11             }
    12         }
    13     }
    14     return $arr;
    15 }
    16 $arr = [5,2,4,7,9,4,2,6,8,3];
    17 print_r(paixu($arr));

    这个写法,大致看上去和标准的冒泡排序写法非常相似,思路也非常像。

    这个排序的思路是怎么样呢?

    首先,假设还是实现数组的从小到大的排序。

    第一轮循环,用数组的第一个元素,逐一和第二个一直到最后一个元素比对,每次对比,只要谁小,谁就和第一个元素交换。

    第二轮循环,则从第二个元素开始,逐一和第三个到最后一个比对,谁小,就和第二个元素交换。一直这样循环比对,直到最后。

    这每轮循环,都把最小的那个元素上浮到了最顶上。

    标准的冒泡排序是每一轮把最大的确定在最后,而这个排序没一轮把最小的确定在最前边。

    可以说这两个真的算是比较像了,当然,这个排序的形式,也很像选择排序

    目前为止,咱这也说不好,这个后边的排序,到底算冒泡排序?还算选择排序呢?或者他有自己的名字。

    有了解的朋友,还望多指教。

  • 相关阅读:
    面向接口程序设计思想实践
    Block Chain Learning Notes
    ECMAScript 6.0
    Etcd Learning Notes
    Travis CI Build Continuous Integration
    Markdown Learning Notes
    SPRING MICROSERVICES IN ACTION
    Java Interview Questions Summary
    Node.js Learning Notes
    Apache Thrift Learning Notes
  • 原文地址:https://www.cnblogs.com/leafinwind/p/10303526.html
Copyright © 2011-2022 走看看