PHP是一種常用的服務(wù)器端腳本語言,廣泛應(yīng)用于Web開發(fā)領(lǐng)域。在PHP中,快速排序是一種常見的排序算法,它通過分治的思想將一個(gè)大問題拆分成若干個(gè)小問題,并通過遞歸的方式解決這些小問題,最終將問題解決。本文將介紹幾種常見的PHP快速排序代碼。
1. 遞歸實(shí)現(xiàn)快速排序
function quickSort($arr) { $length = count($arr); if ($length <= 1) { return $arr; } $pivot = $arr[0]; $left = $right = array(); for ($i = 1; $i < $length; $i++) { if ($arr[$i] < $pivot) { $left[] = $arr[$i]; } else { $right[] = $arr[$i]; } } return array_merge(quickSort($left), array($pivot), quickSort($right)); } // 使用示例 $arr = array(5, 2, 8, 9, 1, 3); $result = quickSort($arr); print_r($result);
上述代碼中,我們首先判斷數(shù)組長度是否小于等于1,如果是,則直接返回該數(shù)組。然后選取數(shù)組的第一個(gè)元素作為基準(zhǔn)值(pivot),將比基準(zhǔn)值小的元素放入$left數(shù)組中,將比基準(zhǔn)值大的元素放入$right數(shù)組中。最后,通過遞歸調(diào)用quickSort函數(shù)對$left和$right數(shù)組進(jìn)行排序,并將結(jié)果與基準(zhǔn)值合并返回。
2. 原地排序?qū)崿F(xiàn)快速排序
function quickSort(&$arr, $left, $right) { if ($left >= $right) { return; } $pivot = $arr[$left]; $i = $left; $j = $right; while ($i < $j) { while ($i < $j && $arr[$j] >= $pivot) { $j--; } $arr[$i] = $arr[$j]; while ($i < $j && $arr[$i] <= $pivot) { $i++; } $arr[$j] = $arr[$i]; } $arr[$i] = $pivot; quickSort($arr, $left, $i - 1); quickSort($arr, $i + 1, $right); } // 使用示例 $arr = array(5, 2, 8, 9, 1, 3); $length = count($arr); quickSort($arr, 0, $length - 1); print_r($arr);
上述代碼中,我們使用兩個(gè)指針$i和$j分別從數(shù)組的左邊和右邊進(jìn)行掃描,如果$arr[$j]小于基準(zhǔn)值,則將$arr[$j]賦值給$arr[$i];如果$arr[$i]大于基準(zhǔn)值,則將$arr[$i]賦值給$arr[$j]。當(dāng)$i和$j相遇時(shí),將基準(zhǔn)值賦值給$arr[$i]。然后,通過遞歸調(diào)用quickSort函數(shù)對基準(zhǔn)值左邊和右邊的子數(shù)組進(jìn)行排序。
3. 非遞歸實(shí)現(xiàn)快速排序
function quickSort($arr) { $stack = array(array(0, count($arr) - 1)); while (!empty($stack)) { $range = array_pop($stack); $left = $range[0]; $right = $range[1]; if ($left >= $right) { continue; } $pivot = $arr[$left]; $i = $left; $j = $right; while ($i < $j) { while ($i < $j && $arr[$j] >= $pivot) { $j--; } $arr[$i] = $arr[$j]; while ($i < $j && $arr[$i] <= $pivot) { $i++; } $arr[$j] = $arr[$i]; } $arr[$i] = $pivot; $stack[] = array($left, $i - 1); $stack[] = array($i + 1, $right); } return $arr; } // 使用示例 $arr = array(5, 2, 8, 9, 1, 3); $result = quickSort($arr); print_r($result);
上述代碼中,我們使用一個(gè)棧來保存待處理子數(shù)組的范圍,初始時(shí)將整個(gè)數(shù)組的范圍壓入棧中。然后,循環(huán)處理?xiàng)V械脑?,取出范圍,進(jìn)行與上述原地排序相同的操作,并將左右子數(shù)組的范圍壓入棧中。最終,棧為空時(shí),排序完成。
以上是幾種常見的PHP快速排序代碼??焖倥判蚴且环N高效的排序算法,適用于大規(guī)模數(shù)據(jù)的排序。使用遞歸、原地排序或非遞歸的方式實(shí)現(xiàn)快速排序,可以根據(jù)實(shí)際需求選擇合適的方式。希望本文能幫助到你理解和使用PHP快速排序算法。
如對本文有疑問,請?zhí)峤坏浇涣髡搲?,廣大熱心網(wǎng)友會(huì)為你解答?。?點(diǎn)擊進(jìn)入論壇