php版本常用的排序算法匯總(php常見的排序算法)

本文目錄一覽:

PHP實現常見的排序算法

註:為方便描述,下面的排序全為正序(從小到大排序)

假設有一個數組[a,b,c,d]

冒泡排序依次比較相鄰的兩個元素,如果前面的元素大於後面的元素,則兩元素交換位置;否則,位置不變。具體步驟:

1,比較a,b這兩個元素,如果ab,則交換位置,數組變為:[b,a,c,d]

2,比較a,c這兩個元素,如果ac,則位置不變,數組變為:[b,a,c,d]

3,比較c,d這兩個元素,如果cd,則交換位置,數組變為:[b,a,d,c]

完成第一輪比較後,可以發現最大的數c已經排(冒)在最後面了,接着再進行第二輪比較,但第二輪比較不必比較最後一個元素了,因為最後一個元素已經是最大的了。

第二輪比較結束後,第二大的數也會冒到倒數第二的位置。

依次類推,再進行第三輪,,,

就這樣最大的數一直往後排(冒),最後完成排序。所以我們稱這種排序算法為冒泡排序。

選擇排序是一種直觀的算法,每一輪會選出列中最小的值,把最小值排到前面。具體步驟如下:

插入排序步驟大致如下:

快速排序是由東尼·霍爾所發展的一種排序算法。在平均狀況下,排序 n 個項目要Ο(n log n)次比較。在最壞狀況下則需要Ο(n2)次比較,但這種狀況並不常見。事實上,快速排序通常明顯比其他Ο(n log n) 算法更快,因為它的內部循環(inner loop)可以在大部分的架構上很有效率地被實現出來,且在大部分真實世界的數據,可以決定設計的選擇,減少所需時間的二次方項之可能性。

步驟:

從數列中挑出一個元素,稱為 「基準」(pivot),

重新排序數列,所有元素比基準值小的擺放在基準前面,所有元素比基準值大的擺在基準的後面(相同的數可以到任一邊)。在這個分區退出之後,該基準就處於數列的中間位置。這個稱為分區(partition)操作。

遞歸地(recursive)把小於基準值元素的子數列和大於基準值元素的子數列排序。

最常見的算法,用PHP如何實現

1、冒泡排序

function bubble_sort($arr) {

    $n=count($arr);

    for($i=0;$i$n-1;$i ){

        for($j=$i 1;$j$n;$j ) {

            if($arr[$j]$arr[$i]) {

                $temp=$arr[$i];

                $arr[$i]=$arr[$j];

                $arr[$j]=$temp;

            }

        }

    }

    return $arr;

}

2、歸併排序

function Merge($arr, $left, $mid, $right) {

  $i = $left;

  $j = $mid 1;

  $k = 0;

  $temp = array();

  while ($i = $mid  $j = $right)

  {

    if ($arr[$i] = $arr[$j])

      $temp[$k ] = $arr[$i ];

    else

      $temp[$k ] = $arr[$j ];

  }

  while ($i = $mid)

    $temp[$k ] = $arr[$i ];

  while ($j = $right)

    $temp[$k ] = $arr[$j ];

  for ($i = $left, $j = 0; $i = $right; $i , $j )

    $arr[$i] = $temp[$j];

}

 

function MergeSort($arr, $left, $right)

{

  if ($left  $right)

  {

    $mid = floor(($left $right) / 2);

    MergeSort($arr, $left, $mid);

    MergeSort($arr, $mid 1, $right);

    Merge($arr, $left, $mid, $right);

  }

}

3、二分查找-遞歸

function bin_search($arr,$low,$high,$value) {

    if($low$high)

        return false;

    else {

        $mid=floor(($low $high)/2);

        if($value==$arr[$mid])

            return $mid;

        elseif($value$arr[$mid])

            return bin_search($arr,$low,$mid-1,$value);

        else

            return bin_search($arr,$mid 1,$high,$value);

    }

}

4、二分查找-非遞歸

function bin_search($arr,$low,$high,$value) {

    while($low=$high) {

        $mid=floor(($low $high)/2);

        if($value==$arr[$mid])

            return $mid;

        elseif($value$arr[$mid])

            $high=$mid-1;

        else

            $low=$mid 1;

    }

    return false;

}

5、快速排序

function quick_sort($arr) {

    $n=count($arr);

    if($n=1)

        return $arr;

    $key=$arr[0];

    $left_arr=array();

    $right_arr=array();

    for($i=1;$i$n;$i ) {

        if($arr[$i]=$key)

            $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($key),$right_arr);

}

6、選擇排序

function select_sort($arr) {

    $n=count($arr);

    for($i=0;$i$n;$i ) {

        $k=$i;

        for($j=$i 1;$j$n;$j ) {

           if($arr[$j]$arr[$k])

               $k=$j;

        }

        if($k!=$i) {

            $temp=$arr[$i];

            $arr[$i]=$arr[$k];

            $arr[$k]=$temp;

        }

    }

    return $arr;

}

7、插入排序

function insertSort($arr) {

    $n=count($arr);

    for($i=1;$i$n;$i ) {

        $tmp=$arr[$i];

        $j=$i-1;

        while($arr[$j]$tmp) {

            $arr[$j 1]=$arr[$j];

            $arr[$j]=$tmp;

            $j–;

            if($j0)

                break;

        }

    }

    return $arr;

}

php數組排序有很多的方法,哪位可以詳細的分解一二嗎,如用函數和不用函數。

在php數組排序中我們通常會用到下列幾個函數。

sort() —— 以升序對數組排序,是以元素值來排序的

rsort() —– 以降序對數組排序,以元素值來排序。

asort() —– 根據值,以升序對關聯數組進行排序

ksort() —– 根據鍵,以升序對關聯數組進行排序

arsort() —- 根據值,以降序對關聯數組進行排序

krsort() —- 根據鍵,以降序對關聯數組進行排序

array_multisort()—-對多個數組或多維數組進行排序

用sort函數來做下示例吧

?php

$string=array(“Yes”,”True”,”False”);

sort($string);

print_r($string);

?

運行結果為:Array ( [0] = False [1] = True [2] = Yes )

再來看一個array_multisort的例子了,

?php

$att[] = array(‘name’ = ‘cat’, ‘number’ = 2);

$att[] = array(‘name’ = ‘dog’, ‘number’ = 1);

$att[] = array(‘name’ = ‘dgg’, ‘number’ = 6);

$att[] = array(‘name’ = ‘monkey’, ‘number’ = 2);

$att[] = array(‘name’ = ‘bear’, ‘number’ = 6);

$att[] = array(‘name’ = ‘bee’, ‘number’ = 7);

array_multisort($att,SORT_DESC,SORT_REGULAR);

print_r($att);

?

輸出結果為:

Array (

[0] = Array ( [name] = monkey [number] = 2 )

[1] = Array ( [name] = dog [number] = 1 )

[2] = Array ( [name] = dgg [number] = 6 )

[3] = Array ( [name] = cat [number] = 2 )

[4] = Array ( [name] = bee [number] = 7 )

[5] = Array ( [name] = bear [number] = 6 )

)

不用數組的來個例子了。

?php

$att[] = array(‘name’ = ‘cat’, ‘number’ = 2);

$att[] = array(‘name’ = ‘dog’, ‘number’ = 1);

$att[] = array(‘name’ = ‘dgg’, ‘number’ = 6);

$att[] = array(‘name’ = ‘monkey’, ‘number’ = 2);

$att[] = array(‘name’ = ‘bear’, ‘number’ = 6);

$att[] = array(‘name’ = ‘bee’, ‘number’ = 7);

for($i=0;$icount($att);$i++){

foreach($att as $key=$val){

if($att[$i][‘number’]$val[‘number’]){

$att[$key]=$att[$i];

$att[$i]=$val;

}

}

}

print_r($att);

?

結果:

Array (

[0] = Array ( [name] = bee [number] = 7 )

[1] = Array ( [name] = bear [number] = 6 )

[2] = Array ( [name] = dgg [number] = 6 )

[3] = Array ( [name] = cat [number] = 2 )

[4] = Array ( [name] = monkey [number] = 2 )

[5] = Array ( [name] = dog [number] = 1 )

)

當然還有更多的方法,如插入排序,選擇排序,冒泡排序,快速排序等。這些網站有很多的,如這個網站上就有:至於數組和字符串的話,主要有str_split()、explode(),preg_split()三個函數。當然還有別的方法,上面那個網我站有說到,你可以自己去找一找了。

php幾種排序算法實例詳解

下面給你介紹四種排序方法:

1) 插入排序(Insertion Sort)的基本思想是: 

每次將一個待排序的記錄,按其關鍵字大小插入到前面已經排好序的子文件中的適當位置,直到全部記錄插入完成為止。實現代碼如下:

2) 選擇排序(Selection Sort)的基本思想是: 

每一趟從待排序的記錄中選出關鍵字最小的記錄,順序放在已排好序的子文件的最後,直到全部記錄排序完畢。實現代碼如下:

3) 冒泡排序的基本思想是: 

兩兩比較待排序記錄的關鍵字,發現兩個記錄的次序相反時即進行交換,直到沒有反序的記錄為止。實現代碼如下:

4) 快排也是一個高效的排序算法,它的時間複雜度也是O(nlogn)。原理是:選擇一個基準元素,然後把數組中小於這個元素的元素放在基準元素左邊,大於它的,放在基準元素右邊。然後對這兩邊繼續同樣的操作。代碼如下:

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/239848.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-12 12:18
下一篇 2024-12-12 12:18

相關推薦

  • 蝴蝶優化算法Python版

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

    編程 2025-04-29
  • Git secbit:一種新型的安全Git版本

    Git secbit是一種新型的安全Git版本,它在保持Git原有功能的同時,針對Git存在的安全漏洞做出了很大的改進。下面我們將從多個方面對Git secbit做詳細地闡述。 一…

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

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

    編程 2025-04-29
  • Python 常用數據庫有哪些?

    在Python編程中,數據庫是不可或缺的一部分。隨着互聯網應用的不斷擴大,處理海量數據已成為一種趨勢。Python有許多成熟的數據庫管理系統,接下來我們將從多個方面介紹Python…

    編程 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
  • 神經網絡BP算法原理

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

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

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

    編程 2025-04-29

發表回復

登錄後才能評論