程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> php實現四種基本排序算法

php實現四種基本排序算法

編輯:關於PHP編程

php實現四種基本排序算法


排序數組:$arr(1,43,54,62,21,66,32,78,36,76,39);

 

用四種排序算法進行排序

 

冒泡排序:(思路:對未排好序的數,從前往後兩個數一次進行比較和調整,大的下沉,小的上升)

 

    $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;  
    }  

選擇排序:(在一組數中找出最小的那個數與第一個數交換位置,在剩下的數種再找出最小的與第二個位置的數交換,

 

一次繼續,直到倒數第二個數與最後一個數比較位置)

 

    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;  
    }  

插入排序:(假設前面的數已經是排好順序的,現在要把第n個數插到前面的有序數中,使得這n個數也是排好順序的。

 

如此反復循環,直到全部排好順序)

 

    function insertSort($arr) {  
    $len=count($arr);   
    for($i=1, $i<$len; $i++) {  
    $tmp = $arr[$i];  
    //內層循環控制,比較並插入  
    for($j=$i-1;$j>=0;$j--) {  
    if($tmp < $arr[$j]) {  
    //發現插入的元素要小,交換位置,將後邊的元素與前面的元素互換  
    $arr[$j+1] = $arr[$j];  
    $arr[$j] = $tmp;  
    } else {  
    //如果碰到不需要移動的元素,由於是已經排序好是數組,則前面的就不需要再次比較了。  
    break;  
    }  
    }  
    }  
    return $arr;  
    }  

快速排序:(選擇一個基准元素,通常選擇第一個元素或者最後一個元素。通過一趟掃描,將待排序列分成兩部分,

 

一部分比基准元素小,一部分大於等於基准元素,此時基准元素在其排好序後的正確位置,然後再用同樣的方法遞歸地

排序劃分的兩部分。 )

 

function quickSort($arr) {  
//先判斷是否需要繼續進行  
$length = count($arr);  
if($length <= 1) {  
return $arr;  
}  
//選擇第一個元素作為基准  
$base_num = $arr[0];  
//遍歷除了標尺外的所有元素,按照大小關系放入兩個數組內  
//初始化兩個數組  
$left_array = array(); //小於基准的  
$right_array = array(); //大於基准的  
for($i=1; $i<$length; $i++) {  
if($base_num > $arr[$i]) {  
//放入左邊數組  
$left_array[] = $arr[$i];  
} else {  
//放入右邊  
$right_array[] = $arr[$i];  
}  
}  
//再分別對左邊和右邊的數組進行相同的排序處理方式遞歸調用這個函數  
$left_array = quick_sort($left_array);  
$right_array = quick_sort($right_array);  
//合並  
return array_merge($left_array, array($base_num), $right_array);  
}  


 

 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved