日常的排序演算法中,快速排序是其中一種。實現起來相對簡單。
假設有乙個陣列,有若干(n)個元素(數字且無序),需要對其進行從小到大的排序。
快速排序的思路是怎麼樣的呢?
取乙個中間值,然後,用其他陣列元素逐一和這個中間值比較,小於中間值的放在乙個陣列裡,大於中間值的放到另乙個陣列裡。
這樣就以中間值為分界,分成了兩個獨立陣列,一邊都小於中間值,一邊都大於中間值。這樣就完成了一次大致的排序。
然後呢,針對這兩個陣列,做同樣的操作,取中間值對比,再分成兩個獨立的陣列,結果還是一邊小,一邊大。
直到這個陣列最後只剩乙個元素,就不需要操作了。然後把這兩邊陣列,中間加上中間值,最終就是乙個從小到大的排序了。
這個形式,符合遞迴的思想,重複做同樣的事情,碰到乙個特定的情況結束呼叫。
中間值,一般也就是取陣列第乙個元素,然後逐一和其對比。然後拆分成兩個陣列,然後只要該陣列元素不唯一,則自己呼叫自己。將陣列作為引數繼續傳遞。
1function quick_sort($arr)2
8for ($i = 1; $i
< $len; $i++) else14}
15$left = quick_sort($left);//
繼續處理比對左邊的陣列
16$right = quick_sort($right);//
繼續處理比對右邊的陣列
17//將所有結果合併在一起組成每個階段的有一定順序的陣列返回
18return
array_merge($left, array($arr[0]), $right
);19}20
21$arr = [5,2,4,7,8,5,4,2,6,8];
22//
呼叫23
print_r(quick_sort($arr));
PHP 遞迴快速排序
快速排序是對氣泡排序的一種改進 快速排序的基本思路是 設定乙個基準元素,通過排序將需要排序的資料分割成兩個部分,其中一部分的所有資料比基準元素小,另一部分的所有資料比基準元素大,然後對這兩部分資料分別進行遞迴快速排序,最後將得到的資料和基準元素進行合併,就得到了所需資料。arr 8,1,10,9,5...
遞迴 快速排序 快速排序
問題描述 用遞迴來實現快速排序 quick sort 演算法。快速排序演算法的基本思路是 假設要對乙個陣列a進行排序,且a 0 x。首先對陣列中的元素進行調整,使x放在正確的位置上。同時,所有比x小的數都位於它的左邊,所有比x大的數都位於它的右邊。然後對於左 右兩段區域,遞迴地呼叫快速排序演算法來進...
排序 快速排序 遞迴
快速排序的遞迴寫法,總共寫了四種方法 兩個雙指標法 挖坑法 hoare法 快速排序的時間複雜度為o nlogn 表現為不穩定的演算法 快速排序的陣列在交換或者覆蓋的過程中,相同的數字可能會出現位置的變換 快排相當於二叉樹的前序遍歷 void swapargs int pa,int pb int ho...