PHP排序演算法詳解

一、Python排序演算法詳解

Python中有許多內置的排序演算法,主要包括快速排序、堆排序、歸併排序、希爾排序等。下面以快速排序為例詳解。


function quick_sort($arr) {
    $len = count($arr);
    if ($len <= 1) {
        return $arr;
    }
    $pivot = $arr[0];
    $left_arr = $right_arr = array();
    for ($i = 1; $i < $len; $i++) {
        if ($arr[$i] < $pivot) {
            $left_arr[] = $arr[$i];
        } else {
            $right_arr[] = $arr[$i];
        }
    }
    $left_arr = quick_sort($left_arr);
    $right_arr = quick_sort($right_arr);
    return array_merge($left_arr, array($pivot), $right_arr);
}

二、簡單選擇排序演算法(C語言詳解版)

簡單選擇排序是一種簡單直觀的排序演算法,通過交換找到最小的元素放到已排好序的序列末尾。


void selection_sort(int a[], int n) {
    int i, j, min_idx;
    for (i = 0; i < n-1; i++) {
        min_idx = i;
        for (j = i+1; j < n; j++) {
            if (a[j] < a[min_idx]) {
                min_idx = j;
            }
        }
        int temp = a[min_idx];
        a[min_idx] = a[i];
        a[i] = temp;
    }
}

三、哈希排序演算法詳解

哈希排序演算法主要是通過將值的索引映射到特定的桶中,將相似的元素分在同一個桶中,從而實現高效排序。


function hash_sort($arr) {
    $max_val = max($arr);
    $num_buckets = sqrt(count($arr));
    $buckets = array();
    for ($i = 0; $i < $num_buckets; $i++) {
        $buckets[$i] = array();
    }
    foreach ($arr as $val) {
        $idx = floor($num_buckets * $val / ($max_val + 1));
        array_push($buckets[$idx], $val);
    }
    foreach ($buckets as &$bucket) {
        sort($bucket);
    }
    unset($bucket);
    $res = array();
    foreach ($buckets as $bucket) {
        foreach ($bucket as $val) {
            array_push($res, $val);
        }
    }
    return $res;
}

四、歸併排序演算法詳解

歸併排序是一種採用分治策略的排序演算法,將一個大問題拆分成多個小問題,逐一解決並將子問題的結果合併。


function merge($arr1, $arr2) {
    $res = array();
    while (count($arr1) && count($arr2)) {
        $val1 = $arr1[0];
        $val2 = $arr2[0];
        if ($val1 < $val2) {
            array_push($res, array_shift($arr1));
        } else {
            array_push($res, array_shift($arr2));
        }
    }
    if (count($arr1)) {
        array_splice($res, count($res), 0, $arr1);
    }
    if (count($arr2)) {
        array_splice($res, count($res), 0, $arr2);
    }
    return $res;
}

function merge_sort($arr) {
    $len = count($arr);
    if ($len <= 1) {
        return $arr;
    }
    $mid = floor($len / 2);
    $left_arr = array_slice($arr, 0, $mid);
    $right_arr = array_slice($arr, $mid);
    $left_arr = merge_sort($left_arr);
    $right_arr = merge_sort($right_arr);
    return merge($left_arr, $right_arr);
}

五、選擇排序演算法詳解

選擇排序是一種簡單直觀的排序演算法,將數組中最小的元素交換到第一個位置,以此類推。


function selection_sort($arr) {
    $len = count($arr);
    for ($i = 0; $i < $len-1; $i++) {
        $min_idx = $i;
        for ($j = $i+1; $j < $len; $j++) {
            if ($arr[$j] < $arr[$min_idx]) {
                $min_idx = $j;
            }
        }
        $temp = $arr[$min_idx];
        $arr[$min_idx] = $arr[$i];
        $arr[$i] = $temp;
    }
    return $arr;
}

六、雞尾酒排序演算法詳解

雞尾酒排序是改進的冒泡排序演算法,從左向右找到最大元素,再從右向左找到最小元素,重複上述過程直到排序完畢。


function cocktail_sort($arr) {
    $len = count($arr);
    $left = 0;
    $right = $len - 1;
    while ($left < $right) {
        for ($i = $left; $i  $arr[$i+1]) {
                $temp = $arr[$i];
                $arr[$i] = $arr[$i+1];
                $arr[$i+1] = $temp;
            }
        }
        $right--;
        for ($i = $right; $i > $left; $i--) {
            if ($arr[$i] < $arr[$i-1]) {
                $temp = $arr[$i];
                $arr[$i] = $arr[$i-1];
                $arr[$i-1] = $temp;
            }
        }
        $left++;
    }
    return $arr;
}

七、合併排序演算法詳解

合併排序演算法是將兩個有序數組合併成一個有序數組,先比較兩個數組的第一個元素,取其中較小的放入合併數組中,將取數的數組指針後移,再次比較兩個數組中的第一個元素,以此類推。


function merge_sort($arr) {
    $len = count($arr);
    if ($len <= 1) {
        return $arr;
    }
    $mid = floor($len / 2);
    $left_arr = array_slice($arr, 0, $mid);
    $right_arr = array_slice($arr, $mid);
    $left_arr = merge_sort($left_arr);
    $right_arr = merge_sort($right_arr);
    $merged_arr = array();
    $left = 0;
    $right = 0;
    while ($left < count($left_arr) && $right < count($right_arr)) {
        if ($left_arr[$left] < $right_arr[$right]) {
            array_push($merged_arr, $left_arr[$left]);
            $left++;
        } else {
            array_push($merged_arr, $right_arr[$right]);
            $right++;
        }
    }
    while ($left < count($left_arr)) {
        array_push($merged_arr, $left_arr[$left]);
        $left++;
    }
    while ($right < count($right_arr)) {
        array_push($merged_arr, $right_arr[$right]);
        $right++;
    }
    return $merged_arr;
}

原創文章,作者:SAZJ,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/139905.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
SAZJ的頭像SAZJ
上一篇 2024-10-04 00:23
下一篇 2024-10-04 00:23

相關推薦

  • 蝴蝶優化演算法Python版

    蝴蝶優化演算法是一種基於仿生學的優化演算法,模仿自然界中的蝴蝶進行搜索。它可以應用於多個領域的優化問題,包括數學優化、工程問題、機器學習等。本文將從多個方面對蝴蝶優化演算法Python版…

    編程 2025-04-29
  • PHP和Python哪個好找工作?

    PHP和Python都是非常流行的編程語言,它們被廣泛應用於不同領域的開發中。但是,在考慮擇業方向的時候,很多人都會有一個問題:PHP和Python哪個好找工作?這篇文章將從多個方…

    編程 2025-04-29
  • Python實現爬樓梯演算法

    本文介紹使用Python實現爬樓梯演算法,該演算法用於計算一個人爬n級樓梯有多少種不同的方法。 有一樓梯,小明可以一次走一步、兩步或三步。請問小明爬上第 n 級樓梯有多少種不同的爬樓梯…

    編程 2025-04-29
  • AES加密解密演算法的C語言實現

    AES(Advanced Encryption Standard)是一種對稱加密演算法,可用於對數據進行加密和解密。在本篇文章中,我們將介紹C語言中如何實現AES演算法,並對實現過程進…

    編程 2025-04-29
  • Harris角點檢測演算法原理與實現

    本文將從多個方面對Harris角點檢測演算法進行詳細的闡述,包括演算法原理、實現步驟、代碼實現等。 一、Harris角點檢測演算法原理 Harris角點檢測演算法是一種經典的計算機視覺演算法…

    編程 2025-04-29
  • 數據結構與演算法基礎青島大學PPT解析

    本文將從多個方面對數據結構與演算法基礎青島大學PPT進行詳細的闡述,包括數據類型、集合類型、排序演算法、字元串匹配和動態規劃等內容。通過對這些內容的解析,讀者可以更好地了解數據結構與算…

    編程 2025-04-29
  • 瘦臉演算法 Python 原理與實現

    本文將從多個方面詳細闡述瘦臉演算法 Python 實現的原理和方法,包括該演算法的意義、流程、代碼實現、優化等內容。 一、演算法意義 隨著科技的發展,瘦臉演算法已經成為了人們修圖中不可缺少…

    編程 2025-04-29
  • PHP怎麼接幣

    想要在自己的網站或應用中接受比特幣等加密貨幣的支付,就需要對該加密貨幣擁有一定的了解,並使用對應的API進行開發。本文將從多個方面詳細闡述如何使用PHP接受加密貨幣的支付。 一、環…

    編程 2025-04-29
  • 神經網路BP演算法原理

    本文將從多個方面對神經網路BP演算法原理進行詳細闡述,並給出完整的代碼示例。 一、BP演算法簡介 BP演算法是一種常用的神經網路訓練演算法,其全稱為反向傳播演算法。BP演算法的基本思想是通過正…

    編程 2025-04-29
  • 粒子群演算法Python的介紹和實現

    本文將介紹粒子群演算法的原理和Python實現方法,將從以下幾個方面進行詳細闡述。 一、粒子群演算法的原理 粒子群演算法(Particle Swarm Optimization, PSO…

    編程 2025-04-29

發表回復

登錄後才能評論