排序--QuickSort 快排

 

   Quick の implementationjava


 

  快排,就像它的名字必定,風同樣的快。基本上算是最快的排序算法了。快排的基本思想是選擇一個切分的元素。把這個元素排序了。全部這個元素左邊的元素都小於這個元素,全部這個元素右邊的元素都大於這個元素。接着再把左右2個數組分別排序。git

  假設你有以下數組 (全部 i  左邊的對象都小於 切分對象。 全部 j  右邊的對象都大於切分對象 這句話稍後有用 先知道一下)github

  

  首先,咱們把index = 0 的元素看成切分元素。算法

  從index = 1 的位置開始,找到第一個大於49的元素。發現65 大於 49 因此標記一下 i = 2數組

  

  接着從數組的末尾開始找第一個小於49的,發現 index = 6 的時候,value = 27 小於 49 因此mark一下ui

  

  如今交換i 和 j 的元素。spa

  

  交換以後,元素又符合剛纔的定義了(全部 i  左邊的對象都小於 切分對象 由於i會繼續向右邊尋找元素,全部如今i位置的元素必需要小於切分元素, 要否則就不符合定義 i 左邊的元素都小於 切分元素)  而且 (全部 j  右邊的對象都大於切分對象)3d

  因此能夠接着往下走對象

  繼續從i = 2的位置開始 找到 大於49的元素,找到了 i = 3的時候value = 97blog

  

  繼續從右邊開始找 發現 j = 5 的時候13 小於49 

  

  交換位置

  

  如今 i 繼續前進 。中止在 index = 4 的位置, 76 大於 49

  

  j 也繼續從右邊往左邊找。當j = 3 value = 13 小於49 

  

  i >= j 因此不用交換位置。 這個時候須要把切分元素和 j 位置的元素交換位置

  

  這個時候 index = 3 的位置就已是排好的位置了。 49 的右邊的元素都 大於49 , 49 左邊的元素都小於49

  接着就能夠排序 0 - 3 的元素 和 4 到 7 的元素了。

  盜一張圖幫忙理解

  

  具體的實現https://github.com/Cheemion/algorithms/blob/master/src/com/algorithms/sort/QuickSort.java

  有講不清楚的地方,但願能夠給我留言。由於感受本身寫博客並非很很好。嘎嘎

相關文章
相關標籤/搜索