快速分类是我们一直在谈论的话题。如果每个人都想说他的原则可能会被描述,并且可能需要一些时间来写它。
今天,让我谈谈我对快速分类和快速分类模板的理解。
不知道,但不知道为什么。
快速分类基于多个比较和交流
第一个元素在此处指定为前哨(基准元素),然后定义了两个指针,指向数组头和数组结束
首先找到它,找到第一个小于前哨(基准元素)的第一个
从后面回头,找到第一个比前哨(基准元素)大的
因为我们要从小到大,如果我们想从大到小
发现后交换它们
因为此时,左指针和右指针尚未关闭,并且循环必须继续。我们继续根据上述步骤寻找元素
首先找到它,找到小于哨兵(基准元素)的第一个元素
从后面回头,此时,我们发现左右指针又结束了。我们没有成功找到该元素。此时
交换哨兵(基准元素)和左右指针的元素
目前,我们可以发现哨兵的左右与我们分开了。左侧比前哨小,右侧比前哨大。我不会在背面详细介绍。
接下来,我们将实施代码
在这里,我使用Java实现快速分类
我们首先封装了交换功能,以促进我们进行交流。
因为快速行为用于递归想法。通常,当我编写递归功能时,我会想到递归的三个要素。这里的三个元素由我自己汇总,即:确定递归函数的参数和返回值,并确定终止的终止。条件,确定单层逻辑
我们可以根据这个想法确定快速行的实现
不需要返回值,因为我们直接修改了数组中元素的顺序。我们只需要将阵列传递。根据以上的说法,我们需要两个指针,左指针和正确的指针,以便我们可以做到我们,以便我们很容易获得参数。
在终止条件的方面,我们已经说过上面说。当元素只有一个时,我们的排序就完成了,那么我们可以轻松地考虑它。
单层逻辑是快速行的更重要的部分。我们知道,首先确定前哨(通常是数组的第一个元素),然后将元素放在前哨的右侧,将元素大于前哨元素小于前哨元素,将其放在左侧哨兵,然后递归调用该功能。
我们知道我们如何进入实现过程?
我们必须首先完成哨兵元素的元素,然后移动比哨兵大的元素,而较小的元素小于前哨。在这里,我封装了一个函数以完成它。让我们先看一下代码。
这样,我们可以确定前哨元素,然后我们需要递归致电,因为help()函数为我们返回了前哨的索引,我们很容易考虑它。
然后我们的快速排序完成了。让我们看一下代码的集成!
原始:https://juejin.cn/post/709813888880695599141