黑马程序员技术交流社区

标题: 关于快速排序法的问题。只想知道原理,不是编程 [打印本页]

作者: tfy    时间: 2012-12-1 10:02
标题: 关于快速排序法的问题。只想知道原理,不是编程
有一个序列: ( 66,13,51,76,81,26,57,69,23)

以第一个元素为基准,那么第一次的划分后的结果是?

66为基准,比他小的放左边,大的放右边,

那就是:13放66左边,结果:13,66
              51放55的左边,结果是:51,13,66
              76放66的右边,结果是:51,13,66,76.....
23  13  51  57  26  66  81  69  76
先把66用临时变量存储起来,这样66所在的位置便空了出来,然后从右边找,发现23小于66,于是把23放在空出的位置,23原来所在位置空出,然后从左边开始找,找到比66大的数放在空出的位置,以此类推.。。。知道两边找的位置重合 ,最后再把66放回空位,一次划分完成
1)、设置两个变量I、J,排序开始的时候I:=1,J:=N;
   2)以第一个数组元素作为关键数据,赋值给X,即X:=A[1];
   3)、从J开始向前搜索,即由后开始向前搜索(J:=J-1),找到第一个小于X的值,两者交换;
   4)、从I开始向后搜索,即由前开始向后搜索(I:=I+1),找到第一个大于X的值,两者交换;
   5)、重复第3、4步,直到I=J;
23,13,51,76,81,26,57,69,66
23,13,51,66,81,26,57,69,76,
23,13,51,57,81,26,66,69,76,
23,13,51,57,66,26,81,69,76,
23,13,51,57,26,66,81,69,76,
然后再从以23为基准

作者: 冯盼    时间: 2012-12-1 10:36
对于快速排序,个人的理解是:
开始时候找一个数为基准,对这组数进行分组,一组较大数,一组较小数(与基准数比较)。
然后再以这个方法对两边数不断递归。
作者: tfy    时间: 2012-12-1 10:37
哦好的O(∩_∩)O谢谢啊
作者: 冯盼    时间: 2012-12-1 10:46
呵呵,个人理解,仅作参考....




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2