简介

首先还是得简单的介绍一下快速排序这个算法。
快速排序(Quicksort),又称划分交换排序(partition-exchange sort),一种排序算法,最早由东尼·霍尔提出。在平均状况下,排序n个项目要Ο(n log n)次比较。在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见。事实上,快速排序通常明显比其他Ο(n log n)算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来。
快速排序也是被称作21世纪最伟大算法之一。

NO PIC SAY WHAT?

    每个(未排序)的拆分的遍历将第一个元素设为轴心点存储指数 = 轴心点指数 +1从 i=轴心点指数 +1 到 最右指数 的遍历如果 元素[i] < 元素[轴心点]交换(i, 存储指数); 存储指数++交换(轴心点, 存储指数 - 1)

实现的思路是选择一个元素,将比他小的放在他的左边,比他大的放右边,递归完所有未完成排序的数组即可完成最后的目标。

java 实现

    public static void main(String[] args) {int[] test = {6, 9, 28 ,13 ,31 ,26 ,1 ,16 ,7, 22, 49 ,46,45,46};quicksort(test,0);for (int i = 0; i < test.length; i++) {System.out.print(test[i] + "\t");}}/*** 每个(未排序)的拆分的遍历*  将第一个元素设为轴心点*    存储指数 = 轴心点指数 +1*    从 i=轴心点指数 +1 到 最右指数 的遍历*      如果 元素[i] < 元素[轴心点]*        交换(i, 存储指数); 存储指数++*    交换(轴心点, 存储指数 - 1)* @param arr*/private static void quicksort(int[] arr,int l) {if(l >= arr.length) return;//递归出口int j = l + 1;//l 作为轴心点 j 作为存储指数for (int i = l; i < arr.length; i++) {if(j >= arr.length) break;//越界情况if(arr[i] < arr[j]){swap(arr, i, j);}j++;}if(j <= arr.length) swap(arr, l, j-1);quicksort(arr, ++l);}/*** 交换数组中的两个元素* @param arr* @param a* @param b*/private static void swap(int[] arr,int a,int b){int temp = arr[a];arr[a] = arr[b];arr[b] = temp;}

输出

1 6 7 9 13 16 22 26 28 31 45 46 46 49

图解算法目录

【图解算法】排序算法——冒泡排序、选择排序

【图解算法】排序算法——插入排序

【图解算法】排序算法——归并排序

【图解算法】排序算法——快速排序

【图解算法】Java GC算法

【图解算法】排序算法——堆排序

【图解算法】并查集 —— 联合查找算法

【图解算法】排序算法——计数排序

Gif Power By https://visualgo.net

【图解算法】排序算法——快速排序相关推荐

  1. 重点算法排序之快速排序、归并排序(上篇)

    文章目录 一.排序的概念及常见的排序算法 二.快速排序的思想及代码详解 2.1 快速排序的思想 2.2 挖坑法 2.2.1 挖坑法实现思想 2.2.2 挖坑法举例 2.2.3 挖坑法代码实现 2.3 ...

  2. 快速排序图解_排序算法

    1. 快速排序 分治思想 不稳定 时间复杂度:最差O(n^2),平均O(nlogn) 空间复杂度:O(n+1) 每次排序设置一个基准点,小于等于基准点的数放到基准点左边,大于等于基准点的数放到基准点右 ...

  3. 交换排序图解_排序算法学习分享(二)交换排序---冒泡排序与快速排序

    排序,也称为排序算法,可以说是我们学习算法的过程中遇到的第一个门槛,也是实际应用中使用得较为频繁的算法,我将自己对所学的排序算法进行一个归纳总结与分享,如有错误,欢迎指正! (一)排序的分类 排序算法 ...

  4. 图解八大排序算法——我见过的最详细的讲解(转)

    一.分类 1.内部排序和外部排序 内部排序:待排序记录存放在计算机随机存储器中(说简单点,就是内存)进行的排序过程. 外部排序:待排序记录的数量很大,以致于内存不能一次容纳全部记录,所以在排序过程中需 ...

  5. 交换排序图解_排序算法(一):初级比较排序

    排序算法,作为算法中最基础的一部分.其中很多思想值得我们学习借鉴,故有必要了解.掌握一些常见常用的排序算法.排序算法根据是否使用比较元素的思想,可分为两大类:比较排序.非比较排序.本文,我们将对比较排 ...

  6. 图解选择排序算法及优化

    作者:敲代码の流川枫 博客主页:流川枫的博客 专栏:和我一起学java 语录:Stay hungry stay foolish 工欲善其事必先利其器,给大家介绍一款超牛的斩获大厂offer利器--牛客 ...

  7. 排序算法--排序算法汇总

    排序算法无疑是学习数据结构中的重点内容,本文将给出排序算法的汇总. 下面是具体的实现: #include<stdio.h> #include<stdlib.h> #includ ...

  8. java 算法 排序算法_Java七种排序算法以及实现

    Java常见七种排序算法以及实现 最近学习一些排序算法,怕自己以后忘记就打算整理起来供自己复习 萌新一枚学习Java没多久,以下仅供参考.如有错误希望大佬指正,欢迎大家在评论区交流探讨. 1.冒泡排序 ...

  9. 数据结构与算法 / 排序算法(3)

    一.桶排序(Bucket sort) 1.原理 将要排序的数据分到几个有序的桶里,每个桶里的数据再进行排序.桶内的数据排序完毕之后,再把桶里的数据依次取出,组成的序列就是有序的了. 2.原地排序? 属 ...

  10. 数据结构与算法 / 排序算法(2)

    一.归并排序 1.原理 采用分治思想.将数组分成前后两部分,先将这两部分进行排序,然后再将二者合并即可. 2.原地排序? 不属于原地排序.因为每次合并都需要申请大小为 n 的临时数组用于保存合并之后的 ...

最新文章

  1. android shortcut livefoulder
  2. 经典笔试题: 二叉树中和为某一值的路径(路径总和)
  3. spyder matlab,将pycharm配置为matlab或者spyder的用法说明
  4. c++ 错误: reference to local variable ‘...’ returned
  5. JavaEE笔记(九)
  6. python多级网址爬取_python-29:多级页面爬取源码
  7. 全国计算机等级考试题库二级C操作题100套(第57套)
  8. android 双卡流量统计,android流量统计
  9. Python库glob作用分析
  10. oracle参数优化
  11. Tensorflow 之 name/variable_scope 变量管理
  12. [转]在Visual Studio 2013/2015中设计UML活动图
  13. MySQL表中部分字段生成视图_MySQL学习笔记之视图
  14. pta 7-5 病毒变种 C语言
  15. grab显示连接不上服务器,grab软件使用方法 grab打车软件
  16. 西安交大计算机研究生拟录取,西安交通大学2018硕士研究生拟录取名单公示
  17. 记一次修复Mac和Win7双系统启动菜单的经历
  18. 智能访客机成大厦智能办公的亮点
  19. Nginx+Tomcat实现负载均衡、动静分离集群部署
  20. c语言小游戏——弹跳的小球和简单的飞机游戏

热门文章

  1. data:image图片转png与jpg,png转data:image格式。
  2. 网易面试是一种什么体验?
  3. 关于Connection aborted等问题的解决
  4. RocketMq_02_消息队列及角色
  5. 模型优化之模型融合|集成学习
  6. 把maven的setting配置文件改为需要jdk版本
  7. 幸福公开课字幕 中英文全
  8. java计算机毕业设计ssm党支部在线学习
  9. 城 市 名 经 度 纬 度
  10. 数据库的事务ACID特性以及MySQL如何保持事物特性