許多人都說算法是程序的核心,算法的好壞決定了程序的質量。作為一個初級phper,雖然很少接觸到算法方面的東西。但是對於基本的排序算法還是應該掌握的,它是程序開發的必備工具。這裡介紹冒泡排序,插入排序,選擇排序,快速排序四種基本算法,分析一下算法的思路。
前提:分別用冒泡排序法,快速排序法,選擇排序法,插入排序法將下面數組中的值按照從小到大的順序進行排序。
$arr(1,43,54,62,21,66,32,78,36,76,39);
1. 冒泡排序
思路分析:在要排序的一組數中,對當前還未排好的序列,從前往後對相鄰的兩個數依次進行比較和調整,讓較大的數往下沉,較小的往上冒。即,每當兩相鄰的數比較後發現它們的排序與排序要求相反時,就將它們互換。
- $arr=array(1,43,54,62,21,66,32,78,36,76,39);
- function bubbleSort($arr)
- {
- $len=count($arr);
- //該層循環控制 需要冒泡的輪數
- for($i=1;$i<$len;$i++)
- { //該層循環用來控制每輪 冒出一個數 需要比較的次數
- for($k=0;$k<$len-$i;$k++)
- {
- if($arr[$k]>$arr[$k+1])
- {
- $tmp=$arr[$k+1];
- $arr[$k+1]=$arr[$k];
- $arr[$k]=$tmp;
- }
- }
- }
- return $arr;
- }
2. 選擇排序
思路分析:在要排序的一組數中,選出最小的一個數與第一個位置的數交換。然後在剩下的數當中再找最小的與第二個位置的數交換,如此循環到倒數第二個數和最後一個數比較為止。
- function selectSort($arr) {
- //雙重循環完成,外層控制輪數,內層控制比較次數
- $len=count($arr);
- for($i=0; $i<$len-1; $i++) {
- //先假設最小的值的位置
- $p = $i;
- for($j=$i+1; $j<$len; $j++) {
- //$arr[$p] 是當前已知的最小值
- if($arr[$p] > $arr[$j]) {
- //比較,發現更小的,記錄下最小值的位置;並且在下次比較時采用已知的最小值進行比較。
- $p = $j;
- }
- }
- //已經確定了當前的最小值的位置,保存到$p中。如果發現最小值的位置與當前假設的位置$i不同,則位置互換即可。
- if($p != $i) {
- $tmp = $arr[$p];
- $arr[$p] = $arr[$i];
- $arr[$i] = $tmp;
- }
- }
- //返回最終結果
- return $arr;
- }