天天看點

看動畫學算法之:排序-快速排序

簡介

快速排序的例子

快速排序的java代碼實作

随機快速排序的java實作

快速排序的時間複雜度

快速排序也采用的是分而制之的思想。那麼快速排序和歸并排序的差別在什麼地方呢?

歸并排序是将所有的元素拆分成一個個排好序的數組,然後将這些數組再進行合并。

而快速排序雖然也是拆分,但是拆分之後的操作是從數組中選出一個中間節點,然後将數組分成兩部分。

左邊的部分小于中間節點,右邊的部分大于中間節點。

然後再分别處理左邊的數組合右邊的數組。

假如我們有一個數組:29,10,14,37,20,25,44,15,怎麼對它進行快速排序呢?

先看一個動畫:

看動畫學算法之:排序-快速排序

我們再分析一下快速排序的步驟。

我們選擇的是最左邊的元素29作為中間點元素,然後将數組分成三部分:[0, 14, 15, 20, 25],[29],[44, 37]。

中間節點29已經排好序了,不需要處理。

接下來我們再對左右分别進行快速排序。最後就得到了一個所有元素都排序的數組。

我們先來看最核心的部分p

繼續閱讀