人生有涯,学海无涯
今天跟大家分享一个常用的排序算法——快速排序 。我想大家在日常的工作或者面试的时候肯定经常会遇到很多排序算法,而且快速排序算法往往是这里面相对更好的排序算法,并且实现也非常简单 。下面我们一起看下吧 。
01、快速排序我们先看看维基百科的解释:
快速排序(英语:QuickSort),又称划分交换排序(partition-exchange sort),简称快排,一种排序算法,最早由东尼·霍尔提出 。在平均状况下,排序 n 个项目要 O(nlogn) 次比较 。在最坏状况下则需要 O(n^2) 次比较,但这种状况并不常见 。事实上,快速排序通常明显比其他算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地达成 。02、算法思想快速排序的算法思想是分而治之,将一个大的待排序列,分成两个子序列,然后采用递归的方式,依次将子序列也分成更小的子序列,依次进行,最后得到排序好的序列 。算法的实现主要分成三步
- 找到基准点:
- 排列序列,将比基准点小的放在左边的子序列,将比基准点大的放在右边的子序列;
- 采用递归,依次重新选取基准点,在重复进行 1,2 步骤,得到最终的顺序序列
/** * <br> * <b>Function:</b><br> * <b>Author:</b>@author 子悠<br> * <b>Date:</b>2019-09-23 01:07<br> * <b>Desc:</b>无<br> */public class QuickSort {public static void main(String[] args) {int[] array = new int[]{2, 3, 1, 4, 7, 8, 3, 5, 2, 6, 8, 9, 1};quickSort(array, 0, array.length - 1);for (int i = 0; i < array.length; i++) {System.out.print(array[i] + " ");}}/*** 递归排序** @param array 待排序列* @param left左边起始位置* @param right 右边结束位置*/private static void quickSort(int[] array, int left, int right) {if (left < right) {//根据基准点,找到分隔左右子序列的位置索引int position = position(array, left, right);//分别进行左右的递归quickSort(array, left, position - 1);quickSort(array, position + 1, right);}}/*** 找到中间** @param array 待排序列* @param left左边起始位置* @param right 右边结束位置* @return*/private static int position(int[] array, int left, int right) {//找到基准点, 这里使用的是序列的第一个元素int base = array[left];while (left < right) {while (right > left && array[right] >= base) {right--;}//交互位置array[left] = array[right];while (left < right && array[left] <= base) {left++;}//交互位置array[right] = array[left];}//此时 left 与 right 是相等的array[left] = base;return left;}}
运行结果:1 1 2 2 3 3 4 5 6 7 8 8 9【你应该知道的常用排序算法之快速排序】从运行的结果我们看到,已经正常的排序结束了,说明这个算法已经满足了我们的要求,而且详细的代码分析也已经加上了注释,我想大家应该都能看懂 。只要记住核心的几个点就可以了,这里我在重复说明一下:
- 先找基准点 base;
- 比较大小,比 base 小的放在左边序列,比 base 大的放在右边序列;
- 递归左右序列 。
推荐阅读
- 你知道Linux中用户们的密码藏在哪儿吗?
- 春季吃这些食物是肝脏的毒物 三种食物养好你的肝脏
- 春季煲汤注意三点 饮食专家教你怎么煲出好汤
- 春季高发呼吸道疾病 你做好应对措施了吗
- 春季护肤有妙招 专家教你春季护手新招
- 春天为什么容易犯困 这十招让你抖精神
- 春季过敏让人生无可恋 防过敏攻略让你拥抱春天
- 你觉得倘若外星人存在,它们是友好的吗? 外星人警告了我们人类什么
- 我们的婚姻|《我们的婚姻》你看了吗?
- 乌鸡的做法 5款乌鸡食疗方做法教给你