「这是我参与2022首次更文挑战的第19天,活动详情查看:2022首次更文挑战」。
快速排序
前文
本文为个人对于快速排序算法相关知识的一些总结及整理,难免存在不准确之处,如果出现还请见谅。
快速排序
快速排序,看名字就可以知道是一种追求排序速度的算法。它是非常常用的一种排序算法,排序效率相对来说很高。该算法之所以排序速度快,是采用了优化的内部循环。快速排序算法在代码中的实现,则主要依靠了递归的写法完成。
而快速排序的实现过程,主要依赖了双指针的方式。对于一个给定的队列,首先在队列中选取一个标准数据,一般采用队列的第一个元素。然后从队列的两端向中间进行遍历,当左边遇到比标准数据大的元素时,将其替换到右指针的位置,同时右指针向左移动。当右边的指针遇到比标准数据小的数值时,将其赋值给左边指针所在位置,同时左指针向右移动。每当指针发生移动时,就要比较所在位置与标准数据的大小。如果左侧指针所在位置小于标准数值,或者右侧指针所在位置大于标准数值,则指针移动且不发生数据移动。反之,指针移动同时数据移动。经过一次处理后,对左右指针重合位置的数据两侧拆分成新的队列,并对两个新的队列进行排序处理。以此方式进行递归,直至整个队列排序完毕,即可得到最终的排序结果。
public void sort(List<Integer> list){
List<Integer> smaller = new ArrayList();
List<Integer> larger = new ArrayList();
int base;
//指针数据比较及指针移动操作省略
sort(smaller)
sort(larger)
}
快速排序的时间复杂度为o(nlog2n),相对来说是一种比较快的排序算法。由于需要额外的空间,空间复杂度为o(n)。
后记
- 千古兴亡多少事?悠悠。不尽长江滚滚流。