php演算法之快速排序

2021-07-11 08:07:13 字數 2056 閱讀 7576

快速排序法

如果要做到可以隨手寫出快速排序演算法,那首先你就必須了解快速排序的機制到底是什麼樣子的。

我們就先從快排的原理入手。

假如我們有乙個待排序陣列:

$array=array(5,7,4,2,11,10,6);

快排的原理是這個樣子的,首先我們清楚快排肯定要用到遞迴的方法來完成排序,

那麼,每一次遞迴都做了什麼工作呢?其實每一次遞迴的工作非常簡單;

1。首先,選出來陣列的第乙個元素,作為對比值,$array中的就是5

2.然後,從陣列第二個值開始,從前往後找到第乙個比5大的數字,這是乙個for迴圈,

終止條件就是找到第乙個比5大的數字,或者到達陣列的末尾。這裡我們知道的就是7

3.接下來,再用乙個for迴圈,從後往前找,找到第乙個比5小的值,或者到達陣列的末尾。這裡我們得到了2

這個時候我們對比從前向後找第一次for迴圈停下來的值對應的鍵,應該是array[1],也就是i=1;第二次從後向前找的時候,獲得的是array[3],也就是j=3;

4.接下裡的處理會稍微複雜點,就是,這個時候,我們需要判斷,i與j的大小,當i>j的時候,這個時候就等於是完成這兩次迴圈所要做的。但是當ij。

5.如果當兩個for迴圈都找到了符合條件的值,並且i>j的時候,

我們把j對應的值和第乙個我們選作對比值的那個值交換,這個時候,我們就完成了遞迴中一次。

這個時候$array=(4,2,5,7,11,10,6)

6.然後剩下的值分成兩個部分,在交換後對比值所在位置前面的,都是比這個對比值小的,他們成為乙個陣列,

遞迴下去。在交換後對比值所在位置後面的,分成乙個陣列,遞迴下去。

以上就是一次遞迴所做的東西,我們也叫做快排的一次劃分。

其實快速排序之所以稱之快速,就是因為,氣泡排序是每次對比只交換相鄰的兩個值的位置,這樣每個值要移動到它最終的排序結果中所對應的位置,可能需要很多次位置的變化。但是快速排序可在一次劃分中,就確定你選定的那個對比值在最終排序好的佇列中的位置。這就是快排的特點。

思路就是這樣,那麼**是怎麼實現的呢?如下:

<?php 

header('content-type:text/html;charset=utf8 ');

$arr=array(50,2,45,42,6,22,15,11,30,16,13,3);

//呼叫排序方法

echo "";

print_r(quick_sort($arr));

快速排序方法及注釋

function quick_sort($arr) 

//如果沒有返回,說明陣列內的元素個數 多餘1個,需要排序

//選擇乙個標尺

//選擇第乙個元素

$base_num = $arr[0];

//遍歷 除了標尺外的所有元素,按照大小關係放入兩個陣列內

//注意這裡的i一定要等於1,也就是從陣列的第二個值開始比較,因為第乙個值已經是被選定為對比值了

for($i=1; $i<$length; $i++) else

}//再分別對 左邊 和 右邊的陣列進行相同的排序處理方式

//遞迴呼叫這個函式,並記錄結果

$left_array = quick_sort($left_array);

$right_array = quick_sort($right_array);

//合併左邊 標尺 右邊

return array_merge($left_array, array($base_num), $right_array);

}

陣列列印結果為:

array

( [0] => 2

[1] => 3

[2] => 6

[3] => 11

[4] => 13

[5] => 15

[6] => 16

[7] => 22

[8] => 30

[9] => 42

[10] => 45

[11] => 50

)

php演算法之快速排序

首先我們要理解一下快速排序的原理 找到當前陣列中的任意乙個元素 一般選擇第乙個元素 作為標準,新建兩個空陣列,遍歷整個陣列元素,如果遍歷到的元素比當前的元素要小,那麼就放到左邊的陣列,否則放到右面的陣列,然後再對新陣列進行同樣的操作,不難發現,這裡符合遞迴的原理,所以我們可以用遞迴來實現。使用遞迴,...

php 快速排序演算法,PHP 快速排序演算法

概念 快速排序演算法是對冒泡演算法的乙個優化。他的思想是先對陣列進行分割,把大的元素數值放到乙個臨時陣列裡,把小的元素數值放到另乙個臨時陣列裡 這個分割的點可以是陣列中的任意乙個元素值,一般用第乙個元素,即 array 0 然後繼續把這兩個臨時陣列重複上面拆分,最後把小的陣列元素和大的陣列元素合併起...

php 快速排序演算法,php 快速排序函式

在php程式設計中會用到一些常用的演算法,把這些演算法 寫成函式方便以後呼叫 php快速排序函式就這樣誕生了,兩個版本,遞迴和無遞迴。可以根據實際需要選用。qsort 資料快速排序遞迴版 array to sort 需要排序的陣列 排序過程中,陣列的鍵會被替換為數字索引的鍵 如果 array to ...