简介

快速排序是对冒泡排序的一种改进,是一种分治算法,时间复杂度为O(nlogn)

基本思想

  1. 先从数列中取出一个数作为基准数。
  2. 分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。
  3. 再对左右区间重复第二步,直到各区间只有一个数。

Java实现代码

import java.util.Arrays;public class Main {public static void main(String[] args){//测试数据int[] nums = new int[10];for(int i=0;i<10;i++)nums[i] = (int)(Math.random()*100);System.out.println("原数组:");Arrays.stream(nums).forEach(num->{System.out.print(num+" ");});quickSort(nums, 0, nums.length-1);System.out.println("\n排序结果:");Arrays.stream(nums).forEach(num->{System.out.print(num+" ");});}public static void quickSort(int[] nums, int low, int high){if(low<high){//以第一个数为基准数,将大于基准数的数放于基准数右侧,小于的则放于左侧int middle = Qsort(nums, low, high);//对排序后的左部分排序quickSort(nums, low, middle-1);//对排序后的右部分排序quickSort(nums, middle+1, high);}}public static int Qsort(int[] nums, int low, int high){/*** 单次排序* 步骤:*   1.从右往左找出第一个比基准数小的数*   2.从左往右找出第一个比基准数大的数*   3.重复以上,直到low>high*/int middle = nums[low];while(low<high){//从右往左找出第一个比基准数小的数while(low<high&&nums[high]>middle)high--;nums[low] = nums[high];//从左往右找出第一个比基准数大的数while(low<high&&nums[low]<=middle)low++;nums[high]=nums[low];}nums[low] = middle;//返回基准数的索引return low;}
}

参考

  • 快速排序 —— 菜鸟教程

快速排序算法思想及实现相关推荐

  1. linux公社 java算法_Java快速排序算法

    快速排序算法思想: 快速排序(Quicksort)是对冒泡排序的一种改进. 快速排序由C. A. R. Hoare在1962年提出.它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一 ...

  2. 十二之续、快速排序算法的深入分析

    十二之续.快速排序算法的深入分析 作者:July   二零一一年二月二十七日 -------------------------- 前言 一.快速排序最初的版本 二.Hoare版本的具体分析 三.Ho ...

  3. python学习——python实现快速排序算法

    python实现快速排序算法 一.快速排序算法实现原理 基本思想 具体步骤 二.图解快速排序 三.py代码实现快速排序算法 一.快速排序算法实现原理 基本思想 先从数列中取出一个数作为基准数. 分区过 ...

  4. 十大排序算法:快速排序算法

    一.快速排序算法思想或步骤 分解: 数组A[p-r]被划分为两个子数组A[p-q-1]和A[q+1-r],使得A[q]为大小居中的数,左侧A[p-q-1]中的每个元素都小于等于它,而右边A[q+1-r ...

  5. 快速排序 C++代码实现及其算法思想及时间复杂度分析及优化 恋上数据结构笔记

    文章目录 复习梗概 算法思想 算法复杂度分析及稳定性 如何优化? 快速排序改进版代码C++ 快速排序个人青春版代码 完整代码 复习梗概 算法思想,别的排序名字直接就能让人联想到它的算法思想,唯独快速排 ...

  6. 排序算法之快速排序实现及算法思想

    快速排序的思想是基于分治算法. 首先说明:快速排序是不稳定的!! 时间复杂度:O(nlogn) 给定区间[l,r] 算法思想: 第一步:确定分界点 可取q[l].q[r].q[(l+r)/2].随机. ...

  7. 视频教程-快速排序算法-算法思想-Java

    快速排序算法-算法思想 十三年软件互联网从业经验,使用JDK从1.4到1.8,从传统系统开发到互联网架构,从Struts使用到spring Cloud,拿过2次极客软件创意比赛大奖.曾经摆过地摊,卖过 ...

  8. 借鉴快速排序的思想,实现算法将整型数组a[0...n]分成两块,使得第一块元素均大于等于0,第二块的元素均小于0,要求算法原地工作且时间复杂度为O(n)

    题目:借鉴快速排序的思想,实现算法将整型数组a[0...n]分成两块,使得第一块元素均大于等于0,第二块的元素均小于0,要求算法原地工作且时间复杂度为O(n) 完整代码实现: #include< ...

  9. 快速排序算法实现思想个人理解

    一.概述 快速排序是冒泡排序的改进算法.它也是通过不断比较和移动交换来实现排序的,只不过它的实现增大了记录的比较和移动的距离,将关键字较大的元素从前面直接放到后面,关键字较小的元素直接从后面放到前面, ...

最新文章

  1. 996月入三万,他却要放弃
  2. python unitest框架_python单元测试框架Unitest
  3. 中石油训练赛 - 腿部挂件(可持久化字典树)
  4. java php python 高并发_关于php如何调用Python快速发送高并发邮件的示例代码
  5. Android串口编程--开关灯Demo(附源码)
  6. 微信小程序 - 非Form数据怎么发送到后端?
  7. springsession分布式登录被覆盖_拉勾 分布式 学习小结
  8. 【软件测试】白盒测试の基路径法
  9. mybatisplus逆向工程生成代码
  10. 1_文本处理与词嵌入
  11. bzoj2818: Gcd
  12. 《逻辑与计算机设计基础(原书第5版)》——1.7 格雷码
  13. python管道怎么使用_如何在多个流程中正确使用管道(2)
  14. android 线程使用监控思路分享
  15. 小程序路径与APPID获取
  16. 限时免费下载《程序员面试宝典》.pdf
  17. 常微分方程机敏问答[1] #20210611
  18. Excel中如何使用COLUMN和COLUMNS函数
  19. 防火墙双机热备升级步骤
  20. blob形式导出Excel

热门文章

  1. 牛客题霸 [ 验证IP地址] C++题解/答案
  2. [线性代数学习笔记] 线性递推数列及 Berlekamp-Massey 算法的详细推导过程
  3. P4849 寻找宝藏(模板:四维偏序)
  4. YBTOJ:伞兵空降(二分图匹配)
  5. P3302-[SDOI2013]森林【主席树,LCA,启发式合并】
  6. bzoj3143,P3232-[Hnoi2013]游走【数学期望,高斯消元,贪心】
  7. nssl1259-sequence【组合数,差分】
  8. ssl1746-商务旅行【tarjan,LCA】
  9. 【2018.3.31】模拟赛之一-ssl2406 约数【水题】
  10. 【SPFA】重建道路(jzoj 1212)