1. 程式人生 > 實用技巧 >PHP基礎之排序

PHP基礎之排序

前言

之前簡單介紹了流程控制,函式,陣列等。有興趣的可以看看。
PHP入門之型別與運算子
PHP入門之流程控制
PHP入門之函式
PHP入門之陣列
接下來介紹一下排序,排序是將一組資料,依指定的順序進行排列的過程。常用的排序方法有冒泡法,選擇排序法,插入排序法。

氣泡排序法

思想:
它重複走過要排序的元素列,依次比較兩個相鄰的元素,如果順序錯誤就把它們交換過來,直到沒有需要交換的為止。
程式碼案例:

<?php
#氣泡排序
$myarr=array(4,3,9,1,6,23.5);
function bubbleSort (&$myarr){       
    $temp=0;   #N個數排序,要排N-1次。外層控制迴圈多少趟
    for ($i=0;$i<count($myarr)-1;$i++){
         #控制每一趟迴圈的次數。
        for ($j=0;$j<count($myarr)-1-$i;$j++){
            if ($myarr[$j]>$myarr[$j+1]){
                $temp=$myarr[$j];
                $myarr[$j]=$myarr[$j+1];
                $myarr[$j+1]=$temp;
            }
        }
    }

}
bubbleSort($myarr);
print_r($myarr);  #列印陣列
?>

輸出結果為:
Array ( [0] => 1 [1] => 3 [2] => 4 [3] => 6 [4] => 9 [5] => 23.5 )

選擇排序法

思想:
假設第一個為最小(大)元素,依次比較,如果錯誤,交換順序,找到未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然後,再從剩餘未排序元素中繼續尋找最小(大)元素,然後放到已排序序列的末尾。以此類推,直到所有元素均排序完畢。
程式碼案例:

<?php
#選擇排序
$myarr=array(4,3,9,1,6,23.5);

function selectionSort (&$myarr){    
    $temp=0;
    for ($i=0;$i<count($myarr)-1;$i++){
        #將第一個值認為是最小的值
        $minval=$myarr[$i];
        #記錄最小值的下標
        $minindex=$i;
        for ($j=$i+1;$j<count($myarr);$j++){
            if ($minval>$myarr[$j]){
                $minval=$myarr[$j];
                $minindex=$j;
            }
        }
        $temp=$myarr[$i];
        $myarr[$i]=$myarr[$minindex];
        $myarr[$minindex]=$temp;
    }
}
selectionSort($myarr);
print_r($myarr);    #列印陣列
?>

輸出結果:
Array ( [0] => 1 [1] => 3 [2] => 4 [3] => 6 [4] => 9 [5] => 23.5 )

插入排序

思想:
插入排序就像我們玩撲克牌,右手為亂排的,我們一張張檢視,為它找合適的位置插入到左手的有序牌中。
插入排序是指在待排序的元素中,假設前面n-1(其中n>=2)個數已經是排好順序的,現將第n個數插到前面已經排好的序列中,然後找到合適自己的位置,使得插入第n個數的這個序列也是排好順序的。按照此法對所有元素進行插入,直到整個序列排為有序的過程,稱為插入排序。
程式碼案例:

<?php
#插入排序
$myarr=array(4,3,9,1,6,23.5);

function insertSort (&$myarr){                
    for ($i=1;$i<count($myarr);$i++){
        #這是要插入的數
        $insertval=$myarr[$i];
        #這是和插入的數進行比較
        $insertindex=$i-1;
              #滿足條件說明我們還沒有找到合適的位置
        while ($insertindex>=0 && $insertval<$myarr[$insertindex]){
            $myarr[$insertindex+1]=$myarr[$insertindex];
            $insertindex--;

        }
        #插入(給$insertval找到合適的位置)
        $myarr[$insertindex+1]=$insertval;
    }
}

insertSort($myarr);
print_r($myarr);
?>

輸出結果:
Array ( [0] => 1 [1] => 3 [2] => 4 [3] => 6 [4] => 9 [5] => 23.5 )

小結

簡單介紹了一下常用的三種排序方法,希望對大家有所幫助。