First we try, then we trust

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

十二、 快速排序法

其实"快速排序法"不应当出现在华容道系列中,毕竟它是纯数据结构的内容。在这里我只简要介绍一下。以下内容来自D.S.Malik与P.S.Nair著的《Data Structures Using Java》一书。

关于快速排序法有以下要点:

1、 基于递归调用;
2、 使用分而治之的方法对列表排序;
3、 将要排序的列表分成两个子列表,然后被分别排序,并依次递归。最后合并成完成的排序列表。

如图:

 

首先找到一个"中心",在这个例子中是50,与第一位交换,然后将后面的数值归为两类,比50小的(用黄颜色标识)与比50大的(用青颜色标识),通过smallindex指针、index指针以及交换操作可以很容易达到这个目的。经过交换后我们在将中心元素50与smallindex所指的元素进行置换,于是50前面的元素一定比50小,而50后面的元素一定比50大。第一轮置换就到此为止。整个数组被分成了两个部分(黄颜色部分与青颜色部分)。

接下来的工作便是递归了。我们再分别对黄颜色与青颜色数列进行第二轮置换操作,道理完全同上。这样最终数组将被完全排序。这便是快速排序算法。具体的代码实现这里就不说的,感兴趣可以找相关资料或查看华容道中QuickSortArray类中的代码。

(下部分内容我们将讨论TreeLinkedList。我们将链表与树整合起来用来追踪华容道的"步法"。)

posted on 2005-02-06 13:35  吕震宇  阅读(2825)  评论(0编辑  收藏  举报