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

数据结构与算法-----快速排序

时间:2017-12-23 11:59:35      阅读:141      评论:0      收藏:0      [点我收藏+]

标签:com   info   元素   post   nbsp   原理   src   family   class   

  快速排序的原理是,每一次排序都找一个基准数,然后比基准数大的元素,放到基准数的右侧,比基准数小的元素放到基准的左侧,那么最核心的就是找到基准数的位置, 把基准数放到它应在的位置。现在我们对6 1 2 7 9 3 4 5 10 8 进行排序。

   首先找一个基准数,就是一个参照数, 用来进行比较。 为了简单起见,那就选第一个数6作为基准数好了,我们要做的事就是找到6 所在的位置,让6右边的数比它大,让6左边的数比它小 如下形式。

  3 1 2 5 4 6 7 9 10 8 

  我们怎么才能找到6 应该在的位置呢? 方法很简单,那就是从序列3 1 2 5 4 6 7 9 10 8 的两端进行探测。先从序列的右侧进行查找, 只要找到一个比基准数6大的数就停下来,然后再从序列的左边进行查找,只要找到一个比基准数6小的数就停止,这时交换它们两个的位置。 这时我们可以用两个变量i 和 j 分别指向序列的最左侧和最右侧。刚开始的时候,变量i 指向序列的最左边,就是数字6, j指向序列的最右边,指向数字8, 如下图所示

 技术分享图片

  首先j 从右向左移动,只要找到比6小的数就停止下来,j到了5的位置。这时i 再从左向右出发, 只要找到比6大的数就停止下来,所以它到了7的位置

技术分享图片

  这时交换这两个数的位置

 技术分享图片

  第一次交换结束,序列变成了 6, 1, 2, 5, 9 , 3 5, 7, 10, 8.  数字5 和数字7进行了交换。现在j 接着向左走,到了4的位置就停下来,因为4也比6小。这时i 接着从左向右走,到了9的位置,9比6 大。

技术分享图片

  然后再交换它们的位置

技术分享图片

  又一次的交换结束了,我们的序列变成了 6 1 2 5 4 3 9 7 10 8 。 现在接着继续探测, j 接着向左走,到了3的位置就停止了,它比6小。 接着i向右走,突然发现i和j 相遇了,都到了3的位置上,表明探测结束了。

技术分享图片

  基准数6的位置应该在3的位置上,我们来交换3和6位置

 

技术分享图片

到这时我们终于找到的6的位置,比6大的数在它的右侧,比6小的数在它的左侧

 

 

  

数据结构与算法-----快速排序

标签:com   info   元素   post   nbsp   原理   src   family   class   

原文地址:http://www.cnblogs.com/SamWeb/p/8092656.html

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