排序算法之 快速排序 及其时间复杂度和空间复杂度

快速排序实现的重点在于数组的拆分,通常我们将数组的第一个元素定义为比较元素,然后将数组中小于比较元素的数放到左边,将大于比较元素的放到右边,

这样我们就将数组拆分成了左右两部分:小于比较元素的数组;大于比较元素的数组。我们再对这两个数组进行同样的拆分,直到拆分到不能再拆分,数组就自然而然地以升序排列了。

partition算法使用头尾两个方向相反的指针进行遍历,先将数组第一个元素设置为比较元素,头指针从左至右找到第一个大于比较元素的数,尾指针从右至左找到第一个小于比较元素的数,全部交换完毕后将比较元素放到中间位置。

public class Main{//找基准分区public static int getMiddle(int[] array,int low,int high){int tmp=array[low];while(low<high){while(low<high&&array[high]>tmp){high--;}array[low]=array[high];while(low<high&&array[low]<tmp){low++;}array[high]=array[low];}array[low]=tmp;return low;}//递归不断分区(分治)public static void _quickSort(int[] array,int low,int high){if(low<high){int middle=getMiddle(array,low,high);_quickSort(array,middle+1,high);_quickSort(array,low,middle-1);}}public static void quickSort(int[] array){_quickSort(array,0,array.length-1);}public static void main(String[] args){int[] array={5,2,7,1,9,3,8};Main qs=new Main();qs.quickSort(array);for(int i=0;i<array.length;i++){System.out.print(array[i]+" ");}System.out.println();}
}

参考文章:

排序算法之 快速排序 及其时间复杂度和空间复杂度

递归实现快速排序(java)

2020-11-24相关推荐

  1. 奇谈 2020.11.24日记

    生活日记 周二,上课的时候惊闻老师说数电课快要结课了,下节课要讲和考试有关的内容.但我还是听不懂,笑嘻嘻的在课堂上点了外卖. 中午吃什么呢,就吃这个吧.我没有想到今天的外卖,会是我多年外卖史上最离奇的 ...

  2. 模拟京东快递单号查询案例2020/11/24

    模拟京东快递单号查询案例 快递单号输入内容时, 上面的大号字体盒子(con)显示(这里面的字号更大) 表单检测用户输入: 给表单添加键盘事件 同时把快递单号里面的值(value)获取过来赋值给 con ...

  3. QIIME 2教程. 01简介和安装 Introduction Install(2020.11开始更新)

    写在前面 QIIME是微生物组领域最广泛使用的分析流程,10年来引用20000+次,2019年Nature杂志评为近70年来人体菌群研究的25个里程碑事件--里程碑16:生物信息学工具助力菌群测序数据 ...

  4. QIIME 2教程. 24Python命令行模式Artifact API(2020.11)

    文章目录 Python命令行模式 译者简介 Reference 猜你喜欢 写在后面 Python命令行模式 Artifact API https://docs.qiime2.org/2020.11/i ...

  5. 纪中在家培训总结(2020.2.1~2020.2.24)

    前言 因为新型冠状病毒(疫情情况)的原因,纪中培训改为在家培训,一天的进度变成了两天甚至三天的进度QAQ,但我还是想说:武汉加油!中国加油! 这次培训总结没啥好写,请勿嘲讽 正文 Day 0(2020 ...

  6. QIIME 2教程. 01简介和安装 Introduction Install(2020.11)

    文章目录 写在前面 QIIME 2的优势 QIIME 2用户文档(版本:2020.11) 视频:QIIME 2用户文档01.1 简介 入门指南 什么是QIIME 2? 核心概念 数据文件: QIIME ...

  7. 2012~2020年期货全品种TICK数据共享更新至2020.7.24

    VNPY官网 http://www.vnpy.cn 2020.6.10~2020.7.24 期货全市场行情数据 链接:https://pan.baidu.com/s/1AUIMnJFH1SmIdngA ...

  8. 时间复杂度o(n^0.5)_铁路轨道资料汇总(含轨道资料、论文、视频讲解)【更新时间2020.11.5】...

    小编主要从以下几个方面整理轨道资料:1线路资料,2机车车辆,3轨道视频,4论文,5打磨资料,6探伤资料,7测量资料,8戴老师语言讲堂,9老魏笔记 1关于铁路线路资料,点击下面链接即可 钢轨摩擦冻结接头 ...

  9. 【不忘初心】Win10_20H2_2009_19042.610_X64_七合一_[纯净精简版][2.83G](2020.11.2)

    母版来自MSDN WIN10_20H2.19042.508,集成补到19042.610,20H2相比1909 2004版本要稳定很多,此版修复了上次的一些问题,应微软毒.粉的要求新增一版带Defend ...

  10. 2020/11/03:图片验证码和短信验证码

    2020/11/03:图片验证码和短信验证码 图形验证码: 流程: 看懂前端代码,理清逻辑思路,画的出流程图 settings.py配置: # 缓存配置 CACHES = {'default': {' ...

最新文章

  1. 壁纸引擎java运行库_Microsoft Windows Desktop Runtime v5.0.0 桌面程序运行库(含常规运行库)...
  2. Mac下github的使用
  3. redis基础之订阅发布、主从复制和事务(四)
  4. java mvc返回js_Java的学习(39)springboot
  5. NETBEANS_RUBYROR shortcut
  6. JBoss 7.1.1启动时遇到Address already in use: bind /127.0.0.1:9990的处理办法
  7. 力扣347. 前 K 个高频元素(JavaScript,堆)
  8. c语言由n个斐波纳函数,6、C语言 —— 字符串
  9. python调用程序压缩文件_Python实现文件压缩和解压的示例代码
  10. c++ memset 语言_C/C++ 中memset() 函数详解及其作用介绍
  11. cass怎么多级放坡_cass土方计算考虑放坡
  12. oracle数据库基础知识
  13. 基于 Flink、ClickHouse 的舆情分析系统:需求规格说明书与需求界面
  14. Windows 11 LTSC 数字激活方法/HEU KMS Activator 数字激活/LTSC公key激活
  15. java怎么打hello,java hello word怎么打
  16. springboot+ssm+vue前后端分离项目-宠物之家
  17. web集群之通过tomcat部署jpress应用
  18. Domoticz 接入苹果的 HomeKit 实现 Siri 控制
  19. 指针的指针、字符串和指针、数组指针(详)
  20. 《Deep Learning from Scratch》鱼书学习笔记 3-6,7 手写数字的识别

热门文章

  1. 外企面试官最爱提的10个问题
  2. Java操作excel工具easyExcel
  3. vue子组件改变父组件的值
  4. linux简单文件管理命令的使用
  5. Redis 常用监控信息命令总结
  6. python基础----python的使用(四)
  7. AD账号创建日期、最近一次登录时间、最近一次重置密码时间查询
  8. HDFS2.x之RPC流程分析
  9. cacti系统性能监控(CENTOS/UBUNTU)
  10. 填坑利器?Redis如何弥补传统MySQL架构的不足