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