在第 5 在章中,你看到了一个简单的分类方法,叫做 冒泡排序。当时提到有 收视率显著提高。在这里,您将开发最好的版本之一:快速排序(快速排序)。 由C快速分类.A.R.Hoare的发明和命名是目前最好的通用分类算法。我不能在第五章中展示它,因为快速排序的最佳实现是基于递归。本公司将开发的版本对字符数组进行分类,但逻辑适用于对任何类型的对象进行分类。 快速排序是基于分区的思想。一般情况下,选择一个值(称为比较),然后将数组分成两部分。一侧插入所有大于或等于分区值的元素,另一侧插入较小的元素。重复每个剩余部分的过程,直到数组排序完成。例如,给定 fedacb 数组并使用 d 作为比较,数组将在快速排序的第一次重新排列,如下所示:
初始 f e d a c b 第 1 段 b c a d e f
然后对每个部分(即 bca 和 def)重复这个过程。正如你所看到的,这个过程本质上是递归的,实际上,快速排序最简单的实现就是递归。 您可以通过两种方式选择比较值。您可以随机选择它,也可以通过搜索从数组中获得的一小组值的平均值来选择它。为了获得最佳分类,您必须选择位于值范围中间的值。然而,对于大多数数据集来说,这并不容易。最坏的情况是所选值位于一端。即便如此,快速排序仍然可以正确运行。 我们将开发的快速排序版本选择数组的中间元素作为比较。
见QSDemo.java。快速排序:
- 最高效、最广泛使用的分类算法之一。
- 由 C.A.R. 发明。霍尔。
- 根据分区的概念,将数组分为递归排序的部分。
- 比简单的方法如冒泡排序更有效率。
操作:
- 比较值(枢轴):
- 选择一个值作为参考(枢轴),并围绕该值组织数组。
- 小于主元的元素位于一侧,大元素位于另一侧。
- 将过程重复到每个部分的递归地,直到数组完全排序。
QS演示
以上是尝试这个快速排序的详细内容。请关注图灵教育的其他相关文章!