算法描述:

快速排序(Quicksort)是对冒泡排序的一种改进。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分(本例中由partition函数实现),其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

Java源代码:

package ljp.sort.quick; public class QuickSortDemo01 { private int[] list; // 构造函数,初始化数组 public QuickSortDemo01() { list = new int[10]; for (int i = 0; i < list.length; i++) { list[i] = (int) (Math.random() * 1000); } } // 排序函数 public void sort(int begin, int end) { if (begin < end) { int p = partition(begin, end); sort(begin, p - 1); sort(p + 1, end); } } // 分解函数 public int partition(int m, int n) { int temp = list[m]; int i = m; for (int j = m + 1; j <= n; j++) { if (list[j] <= temp) { i++; int t_change = list[i]; list[i] = list[j]; list[j] = t_change; System.out.println("第" + (i + 1) + "个元素 和 第" + (j + 1) + "个元素 交换"); display(); } } int t_change = list[i]; list[i] = list[m]; list[m] = t_change; System.out.println("第" + (i + 1) + "个元素 和 第" + (m + 1) + "个元素 交换"); display(); return i; } public void display() { for (int i : list) { System.out.print(i + " "); } System.out.println(); } public int getLength() { return this.list.length; } public static void main(String[] args) { QuickSortDemo01 quickSortDemo01 = new QuickSortDemo01(); System.out.println("排序前:"); quickSortDemo01.display(); quickSortDemo01.sort(0, quickSortDemo01.getLength() - 1); } }

运行结果:

排序前:
808 914 224 698 308 931 108 697 967 855
第2个元素 和 第3个元素 交换
808 224 914 698 308 931 108 697 967 855
第3个元素 和 第4个元素 交换
808 224 698 914 308 931 108 697 967 855
第4个元素 和 第5个元素 交换
808 224 698 308 914 931 108 697 967 855
第5个元素 和 第7个元素 交换
808 224 698 308 108 931 914 697 967 855
第6个元素 和 第8个元素 交换
808 224 698 308 108 697 914 931 967 855
第6个元素 和 第1个元素 交换
697 224 698 308 108 808 914 931 967 855
第2个元素 和 第2个元素 交换
697 224 698 308 108 808 914 931 967 855
第3个元素 和 第4个元素 交换
697 224 308 698 108 808 914 931 967 855
第4个元素 和 第5个元素 交换
697 224 308 108 698 808 914 931 967 855
第4个元素 和 第1个元素 交换
108 224 308 697 698 808 914 931 967 855
第1个元素 和 第1个元素 交换
108 224 308 697 698 808 914 931 967 855
第2个元素 和 第2个元素 交换
108 224 308 697 698 808 914 931 967 855
第8个元素 和 第10个元素 交换
108 224 308 697 698 808 914 855 967 931
第8个元素 和 第7个元素 交换
108 224 308 697 698 808 855 914 967 931
第10个元素 和 第10个元素 交换
108 224 308 697 698 808 855 914 967 931
第10个元素 和 第9个元素 交换
108 224 308 697 698 808 855 914 931 967

转载于:https://www.cnblogs.com/JPAORM/archive/2012/04/13/2510085.html

排序算法第五篇——快速排序相关推荐

  1. 排序算法:归并排序、快速排序

    相关博客: 排序算法:冒泡排序.插入排序.选择排序.希尔排序 排序算法:归并排序.快速排序 排序算法:桶排序.计数排序.基数排序 排序算法:堆排序 十大排序算法小结 一.归并排序: 1.工作原理: 归 ...

  2. NOI提高级:排序算法之归并排序、快速排序

    图解排序算法(四)之归并排序 图解排序算法(四)之归并排序 - dreamcatcher-cx - 博客园 小学生图解排序算法:⑥归并排序 小学生图解排序算法:⑥归并排序_纯文笔记-CSDN博客_图解 ...

  3. [ 数据结构 -- 手撕排序算法第四篇 ] 选择排序

    手撕排序算法系列之第四篇:选择排序. 从本篇文章开始,我会介绍并分析常见的几种排序,大致包括直接插入排序,冒泡排序,希尔排序,选择排序,堆排序,快速排序,归并排序等. 大家可以点击此链接阅读其他排序算 ...

  4. 八大排序算法总结——Java篇

    概述: 作为算法的鼻祖,八大排序是我们一定要了解学习的,废话不多说,直奔主题. 一. 直接插入排序 二.希尔排序 三.冒泡排序 四.快速排序 五.简单选择排序 六.堆排序 七.基数排序 八.归并排序 ...

  5. [ 数据结构 -- 手撕排序算法第三篇 ] 希尔排序

    手撕排序算法系列之:希尔排序. 从本篇文章开始,我会介绍并分析常见的几种排序,大致包括插入排序,冒泡排序,希尔排序,选择排序,堆排序,快速排序,归并排序等. 大家可以点击此链接阅读其他排序算法:排序算 ...

  6. 排序算法中——归并排序和快速排序

    冒泡排序.插入排序.选择排序这三种算法的时间复杂度都为 $O(n^2)$,只适合小规模的数据.今天,我们来认识两种时间复杂度为 $O(nlogn)$ 的排序算法--归并排序(Merge Sort)和快 ...

  7. 经典排序算法(2)——快速排序算法详解

    快速排序(Quick Sort)也是一种典型的交换排序算法,通过交换数据元素的位置进行排序. 一.算法基本思想 (1)基本思想 快速排序的基本思想就是:通过一趟排序将要排序的数据分割成独立的两部分,其 ...

  8. java 实现 常见排序算法(三)快速排序

    大家好,我是烤鸭: 今天分享一下基础排序算法之快速排序.快速排序是内部排序(基于比较排序)中最好的比较算法. 1.     快速排序: 原理:在要排的数(比如数组A)中选择一个中心值key(比如A[0 ...

  9. php递归实现冒泡排序,排序算法之PHP版快速排序、冒泡排序

    一.快速排序 1.简介 快速排序是由东尼·霍尔所发展的一种排序算法.在平均状况下,排序 n 个项目要Ο(n log n)次比较.在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见.事实上,快速排序 ...

最新文章

  1. SAP QA32试图做UD,系统报错-工厂 BTYC中的 QM 基选设置需要维护
  2. 修改aconda镜像服务器,Jupyter安装链接aconda的实现方法
  3. synchronized()_这篇文章带你彻底理解synchronized关键字
  4. Ubuntu 12.04嵌入式交叉编译环境arm-linux-gcc搭建过程图解
  5. 机器学习(2.sklearn(Scikit-learn)库、字典数据的特征抽取)
  6. kprobe原理解析
  7. windows共享内存
  8. 我眼中的 NCC,WTM 寻亲之旅
  9. sql server 事务_如何使用显式SQL Server事务回滚
  10. Hotmail怎么进不去?!
  11. webpack4.0学习笔记
  12. Java基础---Java---IO流-----BufferedReader、BufferedWriter、缓冲区、装饰设计模式及和继承的区别
  13. js动态创建Form表单并提交
  14. v8声卡怎么录制唱歌_直播声卡怎么连接V8 V8声卡连接方法教程
  15. mysql io 优化_mysql 中io优化
  16. 淡泊明志,宁静致远。「学会做人的涵养」 - Qzone日志
  17. python 检查是否为数字(包括正负数、浮点数)
  18. 前端性能优化--测试工具
  19. 【收藏】如何开始创业
  20. 云课堂服务器技术支持,中学语音教室云课堂云服务器

热门文章

  1. VC++6.0 按F1无法打开 MSDN 的解决办法
  2. IIS故障:World Wide Web Publishing无法启动 提示1721错误
  3. Redis入门之Redis安装、配置及常用指令
  4. Windows域控管理 常用操作 详细汇总
  5. [转]python3_unboundlocalerror报错原因
  6. 计算机出现黑屏问题方法派出,电脑重装系统开机常见黑屏问题的解决方法
  7. 关于职场的6个深刻道理,每个都是血泪教训换来的,你一定要懂
  8. FineReport的JS编辑框和URL地址栏语法简介
  9. 数据分析学习笔记—python面向对象与模块
  10. python开源的人脸识别库_什么是 SeetaFace 开源人脸识别引擎