排序--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

  有讲不清楚的地方,但愿能够给我留言。由于感受本身写博客并非很很好。嘎嘎

相关文章
相关标签/搜索