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 )
#小結
簡單介紹了一下常用的三種排序方法,希望對大家有所幫助。

