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排序

相關文章
相關標籤/搜索