早就聽說過快速排序是一種很優秀,很常用的排序演算法。但是有多少人和筆者一樣只聞其名卻不知其所以然呢?經過一定的學習之後筆者對快速排序有了一定的了解,今天就來捋一捋快速排序的演算法脈絡。
快速排序最核心的思想就是:找到基準值的位置
第一步 :選擇乙個值作為基準值,我們一般使用陣列的第乙個值作為基準值。
第二步:掃瞄整個陣列(先從後向前掃瞄 ,再從前向後掃瞄)
①.比基準值大的放在基準值右邊;
②.比基準值小的放在基準值左邊
第三步:對基準值左右兩側遞迴的重複前兩步的過程。
第一輪流程如下圖所示
畫的圖可能沒有很清晰的表達其邏輯,以下是具體的**實現:
// 快速排序:對 arr 中 l 到 r 位進行排序
// arr : 待排序陣列
// l : 待排序區間起始座標
// r : 待排序區間結束座標
void
quick_sort
(int
*arr,
int l,
int r)
// 將基準值 z 放入其正確位置陣列的 x 位
// 其實,此時 x==y,所以寫成 arr[y] = z 也行
// 再分別對左右區間,進行快速排序
arr[x]
= z;
quick_sort
(arr, l, x -1)
;quick_sort
(arr, x +
1, r)
;return
;}
關於快速排序演算法的理解
直接進入正題吧,快排演算法的思想主要是分兩步 1.使用空間複雜度為1的方法將一堆數中的某個元素找到自己的位置,並且保證左邊的數比自己小 大 右邊的數比自己大 小 2.將這個堆數左邊所有的數再次當做那堆數放到上面1的方法中,重複,直到代入的這堆數完全有序,完成之後再將將右邊所有的數當做那堆數放到上面的...
Java中關於快速排序的理解
在部落格上面看了很多大神的解析,自己慢慢的有了一點思路。首先我認為快速排序就是採用了分治的思想 先找到其中乙個數字作為基準,一般是第乙個,然後找到它在這一組序列中間對應的真正位置,然後以這個數字為分界分為兩組在分別採用一開始找第乙個數字真正位置的方法,分別找到這兩組對應的第乙個數字的位置,然後再分,...
快速排序的理解
快速排序是對氣泡排序的一種改進。它的基本思想是通過一趟掃瞄後,使得排序序列的長度能大幅度地減少。通過一趟掃瞄,確保以某個數為基準點的左邊各數都比它小,右邊各數都比它大。然後又用同樣的方法處理它左右兩邊的數,直到基準點的左右只有乙個元素為止。簡單的說就是 找乙個基準數 待排序的任意數,一般都是選定首元...