java快排法 java快排实现_java 快排

示意图(封面)

上一期我们讲了冒泡排序,这一期我们讲解一个冒泡排序的升级版,快速排序(以下简称快排),首先,让我们了解下什么是快排。

基本原理:快排是基于一种分治的方法实现(不懂分治的同学查下百度词条)。

我们现在对{31,78,29,10,96,65,12,46}进行排序。首先在这个序列中随便找一个数作为基准数31。接下来,需要将这个序列中所有比基准数大的数放在31的右边,比基准数小的数放在31的左边,一次排序后:

12 10 29 31 96 65 78 46

具体的排序步骤,本来我找了个动图,但是由于审核问题我就不po上来了,大家把程序敲进自己的ide中debug运行下,理解的会更加深刻。

下面我文字描述下。

在开始的时候,31在序列的第1位。我们的目标是将31挪到序列中间的某个位置,从而达到这个位置的左面都小于基准值31,右面都大于基准值31。

现在呢,无论其他数字怎么排列,基准值31的位置最终就是确定的了。

所以序列被分割为两个序列12 10 29 (序列1) 和 96 65 78 46 (序列2)。

两个序列分别进行刚才的选择基准进行排序。

序列1选择12作为基准值,排列后的结果就是10 12 29,由于12左面和右面都只有1个数字,不构成序列,序列1这就完成了排序。

我们再来看序列2,选择96作为基准值,排序结果如下:

65 78 46 96

96的左边又构成了一个新的无序序列 65 78 46 (序列3)。

选择65作为基准值再次进行排序,排序结果如下:

46 65 78

65的左右都只有一个数字组不成序列,整个序列排序结束,结果为:

10 12 29 31 46 65 78 96

代码实现:(由于排版问题,代码使用图片上传,大家点击原图查看)

java快排法 java快排实现_java 快排_02

快速排序代码

本期快速排序的教程呢,到这里就结束了,大家想让我出哪些系列可以评论区留言给小编,我将一一记录。

下面附上上期冒泡排序的链接给没看到的同学做链接:

经典排序算法一 冒泡排序(JAVA实现)