演算法和資料結構是乙個程式設計工作人員的內功,技術牛不牛,一般都會看這兩點。作為php程式設計師, 提公升技能當然也得學習演算法。
下面介紹四種入門級排序演算法:氣泡排序、選擇排序、插入排序、快速排序。
一、氣泡排序
原理:對一組資料,比較相鄰資料的大小,將值小資料在前面,值大的資料放在後面。 (以下都是公升序排列,即從小到大排列)
舉例說明: $arr = array(6, 3, 8, 2, 9, 1);
$arr 有6個資料,按照兩兩比較大小如下,注意 比較輪數 和 每輪比較次數
第一輪排序:
第一次比較 6和3比較 結果:3 6 8 2 9 1
第二次比較 6和3比較 結果:3 6 8 2 9 1
第三次比較 8和2比較 結果:3 6 2 8 9 1
第四次比較 8和9比較 結果:3 6 2 8 9 1
第五次比較 9和1比較 結果:3 6 2 8 1 9
第一輪比較總結:1.排序第1輪、比較5次,沒有獲得從小到大的排序 2.因為每次比較都是大數往後靠,所以比較完成後,可以確定大數排在最後(9 已經冒泡冒出來了,下輪比較可以不用比較了 )
第二輪排序:
第一次比較 3和6比較 結果:3 6 2 8 1 9
第二次比較 6和2比較 結果:3 2 6 8 1 9
第三次比較 6和8比較 結果:3 2 6 8 1 9
第四次比較 8和1比較 結果:3 2 6 1 8 9
第二輪比較總結:1.排序第2輪、比較4次,沒有獲得從小到大的排序 2.冒泡出了 8,下輪不用比較8 了
第三輪排序:
第一次比較 3和2比較 結果:2 3 6 1 8 9
第二次比較 3和6比較 結果:2 3 6 1 8 9
第三次比較 6和1比較 結果:2 3 1 6 8 9
第三輪比較總結:1.排序第3輪、比較3次,沒有獲得從小到大的排序 2.冒泡出了 6,下輪不用比較6 了
第四輪排序:
第一次比較 2和3比較 結果:2 3 1 6 8 9
第二次比較 3和1比較 結果:2 1 3 6 8 9
第四輪比較總結:1.排序第4輪、比較2次,沒有獲得從小到大的排序 2.冒泡出了 3,下輪不用比較3 了
第五輪排序:
第一次比較 2和1比較 結果:1 2 3 6 8 9
第五輪比較總結:1.排序第5輪、比較1次,沒有獲得從小到大的排序 2.冒泡出了 2,由於還剩乙個1,不用再比較了,至此通過5輪排序,完成整個排序。
通過以上五輪排序,若干次比較,我們有理由推斷出乙個結論:
對於乙個長度為n的陣列,我們需要排序 n-1 輪,每 i 輪 要比較 n-i 次。對此我們可以用雙重迴圈語句,外層迴圈控制迴圈輪次,內層迴圈控制每輪的比較次數。
<?php
$order_array=array(
5,4,3,6,7,1,2,10,8,9
);function bubble_order($arr)}}
return $arr;
}$new_order_arr=bubble_order($order_array);
echo "";
var_dump($new_order_arr);
php四排序 選擇排序
原理 在一列數字中,選出最小數與第乙個位置的數交換。然後在剩下的數當中再找最小的與第二個位置的數交換,如此迴圈到倒數第二個數和最後乙個數比較為止。以下都是公升序排列,即從小到大排列 舉例說明 arr array 6,3,8,2,9,1 第一輪 第一次比較,第乙個數 6 與 3,8,2,9,1 中 3...
03 排序 氣泡排序
基本原理 顧名思義就是整個過程向氣泡一樣往上公升,單向氣泡排序的基本原理就是 對於給定的n個資料,從第乙個資料開始一次對相鄰的兩個記錄進行比較,當前面的記錄大於後面的記錄時,交換位置,進行一輪比較和換位後,n個記錄中最大的那個被排在最後,即第n位。然後對前面n 1個記錄進行第二次比較,重複該過程。實...
2 排序演算法 氣泡排序
氣泡排序 bubble sort 也是一種簡單直觀的排序演算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越小的元素會經由交換慢慢 浮 到數列的頂端。作為最簡單...