新春特辑快速排序

Posted 万方技术

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了新春特辑快速排序相关的知识,希望对你有一定的参考价值。

        Hello,各位读者小伙伴们,大家新年快乐啊!在新春来临之际,我们来一起学习一个相当快速的排序算法,这个算法有多快呢,快到算法的名字都是用快速来命名的。

        快速排序是在1962年提出的,它的思想就是通过一趟排序,将一组无序数据分割为两个部分,保证这两个部分中,一部分的数据总是要小于另一部分的数据,这个过程称为快速排序。接下来我们再对这两个部分的数据分别进行快速排序,整个排序过程可以使用递归进行,知道数据变得有序。

        光靠我上面的讲解,大家肯定还是不能直观的理解快速排序,接下来我们来画一个图,用图来讲解快速排序到底是怎么工作的吧。首先,我们还是创建一组无序的数据。

        这里的k代表选定的关键元素,排序完成后分为的两个部分,一部分是大于k的,一部分是小于k的。j代表元素位置,从k到j都是小于k的元素,i代表当前遍历的元素的位置,现在排序尚未开始,所以i和j都在同一个位置。现在我们来开始排序的第一步,遍历数组中剩余的元素。

新春特辑(3)快速排序

        当前遍历的元素是1个,值为3,比我们选定的k要小,所以我们要把j向后移,保证从k到j的元素都是小于k的。

新春特辑(3)快速排序

        现在我们遍历的元素为6,比我们选定的k要大,所以我们的j不变,i要继续向后遍历,保证从j到i的元素都是大于k的。

新春特辑(3)快速排序

        继续遍历,8大于5,所以j不动,i继续向下遍历。但是接下来就出现了一个问题,就是下一个元素1比k要小,我们需要把它放入到k到j中间,这样才能使我们要分割的两个部分变成我们预期的效果。这个过程看起来很麻烦,其实有一个非常简单的做法,就是讲j后面的第一个元素与当前遍历的元素交换位置,然后j向后移动,也就是将1和6互换位置,j向后移动。

新春特辑(3)快速排序

        经过这样的简单的操作,我们就能让k到j的数据全部小于k,而j到i的数据全部大于k,持续遍历,直至数组最后一个元素,我们就能让整个数组按照我们想要的顺序排列。

新春特辑(3)快速排序

        接下来我们要做的就是将k放到正确的位置,我们只需要将k和j所在位置的元素互换位置即可。

新春特辑(3)快速排序

        这样我们就完成了第一次排序,接下来我们需要对前后两个部分再次进行快速排序,直至数组有序。我相信聪明的小伙伴看到这里已经按奈不住自己的双手了,想要赶紧去实现一个快速排序算法,加油,我相信你们。

        


以上是关于新春特辑快速排序的主要内容,如果未能解决你的问题,请参考以下文章

全年精彩内容大盘点 | 虎年贺岁特辑

全年精彩内容大盘点 | 虎年贺岁特辑

78.『Ruby春节美食特辑』海外华人庆新春~~舌尖上的中国

nodejs实现冒泡排序和快速排序

❤️数据结构入门❤️(4 - 5)- 快速排序

深度解析(十六)快速排序