五月综合缴情婷婷六月,色94色欧美sute亚洲线路二,日韩制服国产精品一区,色噜噜一区二区三区,香港三级午夜理伦三级三

您現(xiàn)在的位置: 365建站網(wǎng) > 365文章 > php 幾種常見的快速排序代碼

php 幾種常見的快速排序代碼

文章來源:365jz.com     點(diǎn)擊數(shù):211    更新時(shí)間:2023-04-16 03:16   參與評論

php 幾種常見的快速排序代碼

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)入論壇

發(fā)表評論 (211人查看,0條評論)
請自覺遵守互聯(lián)網(wǎng)相關(guān)的政策法規(guī),嚴(yán)禁發(fā)布色情、暴力、反動(dòng)的言論。
昵稱:
最新評論
------分隔線----------------------------

其它欄目

· 建站教程
· 365學(xué)習(xí)

業(yè)務(wù)咨詢

· 技術(shù)支持
· 服務(wù)時(shí)間:9:00-18:00
365建站網(wǎng)二維碼

Powered by 365建站網(wǎng) RSS地圖 HTML地圖

copyright © 2013-2024 版權(quán)所有 鄂ICP備17013400號