PHP实现排序算法

1、冒泡排序

大O符号:order,译为阶,也能够理解为数量级。
php

冒泡排序原理步骤

  1. 每一轮排序找到最大的值,放在数组的最后,而且,排好序的数再也不参与下一轮的排序;算法

  2. 每一轮的排序规则是:每次从第一个数开始,与其右边的数进行比较,大的值放到右边,右边的值再依次往下进行比较,直到进行到未排序数的最后一个数为止;数组

  3. 排序的结束:当未排序的数只有一个时,就完成了排序。函数

冒泡排序伪代码

数组长度:length
function bubble_sort(&$a){
    $i从0到length-1
      $j从0到length-1-$i     //$i表示通过$i次循环后已排好序的个数,length-1-$i表示对未排序的数进行排序
          //对$a[$j]和$a[$j+1]排序    //随着$j递增,较大的数参与下一次排序,直到比较到最后一个未排序数
          若是$a[$j]>$a[$j+1],交换两数值

代码实现

<?php
//两数交换的函数
function swap(&$x,&$y){
    $t = $x;
    $x = $y;
    $y = $t;
}
function bubble_sort(&$a){
    $i;
    $j;
    $len = count($a);
    for($i = 0;$i < $len-1;$i++)
        for($j = 0;$j < $len - 1 - $i;$j++)
            if($a[$j] > $a[$j+1])
                swap($a[$j],$a[$j+1];
}
$arr = array(4,8,1,9,3,7,6,2);
bubble_sort($arr);
print_r($arr);

排序次数

冒泡排序是与插入排序拥有相等的运行时间,可是两种算法在须要的交换次数却很大地不一样。在最好的状况,冒泡排序须要O(n^2)次交换,而插入排序只要最多O(n)交换。spa

特色

最易理解,实现最简单,可是对于少数元素以外的数列排序是很没有效率的。code

参考:https://zh.wikipedia.org/wiki/%E5%86%92%E6%B3%A1%E6%8E%92%E5%BA%8F排序

相关文章
相关标签/搜索