快速排序法
如果要做到可以隨手寫出快速排序演算法,那首先你就必須了解快速排序的機制到底是什麼樣子的。
我們就先從快排的原理入手。
假如我們有乙個待排序陣列:
$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 ...