码迷,mamicode.com
首页 > 编程语言 > 详细

排序--QuickSort 快排

时间:2017-09-19 15:27:35      阅读:157      评论:0      收藏:0      [点我收藏+]

标签:排序   技术   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

  有讲不清楚的地方,希望可以给我留言。因为感觉自己写博客并不是很很好。嘎嘎

  

 

 

 

 

 

 

 

 

 

  

 

 

 

  

排序--QuickSort 快排

标签:排序   技术   png   思想   ext   tps   标记   实现   写博客   

原文地址:http://www.cnblogs.com/robsann/p/7550846.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!