标签:排序 技术 png 思想 ext tps 标记 实现 写博客
Quick の implementation
快排,就像它的名字一定,风一样的快。基本上算是最快的排序算法了。快排的基本思想是选择一个切分的元素。把这个元素排序了。所有这个元素左边的元素都小于这个元素,所有这个元素右边的元素都大于这个元素。接着再把左右2个数组分别排序。
假设你有如下数组 (所有 i 左边的对象都小于 切分对象。 所有 j 右边的对象都大于切分对象 这句话稍后有用 先知道一下)
首先,我们把index = 0 的元素当作切分元素。
从index = 1 的位置开始,找到第一个大于49的元素。发现65 大于 49 所以标记一下 i = 2
接着从数组的末尾开始找第一个小于49的,发现 index = 6 的时候,value = 27 小于 49 所以mark一下
现在交换i 和 j 的元素。
交换之后,元素又符合刚才的定义了(所有 i 左边的对象都小于 切分对象 因为i会继续向右边寻找元素,所有现在i位置的元素必须要小于切分元素, 要不然就不符合定义 i 左边的元素都小于 切分元素) 并且 (所有 j 右边的对象都大于切分对象)
所以可以接着往下走
继续从i = 2的位置开始 找到 大于49的元素,找到了 i = 3的时候value = 97
继续从右边开始找 发现 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
有讲不清楚的地方,希望可以给我留言。因为感觉自己写博客并不是很很好。嘎嘎
标签:排序 技术 png 思想 ext tps 标记 实现 写博客
原文地址:http://www.cnblogs.com/robsann/p/7550846.html