快速排序

基本思想:

  通过一趟排序将待排序记录分割成独立的两部分,其中一部分记录的关键字均比另一部分关键字小,则分别对两部分继续进行排序,直到整个序列有序。

实例:

1.一趟排序的过程:

2.排序的全过程:

把整个序列看做一个数组,把第零个位置看做中轴,和最后一个比,如果比他小,则交换,比它大不做任何处理;

交换了以后再和小的那端比,比它小不交换,比它大交换。这样循环往复,一趟排序完成,左边的就是比中轴小的,

右边的就是比中轴大的,然后再用分治法,分别对这两个独立的数组进行排序。

代码实现

public class QucikSortDemo {public static void main(String arg[]) {int[] numbers = {10, 89, 87, 76, 56, 46, 11, 75, 32, 35, 98};System.out.println("排序前:");printArr(numbers);quickSort(numbers);System.out.println("排序后:");printArr(numbers);}/*** 查找出中轴位置(默认是最低为low)的在number数组排序后所在位置** @param numbers* @param low* @param high* @return*/public static int getMiddle(int[] numbers, int low, int high) {// 数组的第一位作为中轴int temp = numbers[low];while (low < high) {while (low < high && numbers[high] > temp) {high--;}// 比中轴晓得记录移动到低端numbers[low] = numbers[high];while (low < high && numbers[low] < temp) {low++;}// 比中轴大的记录移到高端numbers[high] = numbers[low];}// 中轴记录到尾numbers[low] = temp;// 返回中轴的位置return low;}/*** 分治排序** @param numbers* @param low* @param high*/public static void quickSort(int[] numbers, int low, int high) {if (low < high) {// 将numbers数组进行一分为二int middle = getMiddle(numbers, low, high);// 将低字段表进行递归排序quickSort(numbers, low, middle - 1);// 将高字段表进行递归排序quickSort(numbers, middle + 1, high);}}public static void quickSort(int[] numbers) {if (numbers.length > 0) {quickSort(numbers, 0, numbers.length - 1);}}public static void printArr(int[] numbers) {for (int i = 0; i < numbers.length; i++) {System.out.print(numbers[i] + ",");}System.out.println("");}}

转载于:https://www.cnblogs.com/superfj/p/8613589.html

Java基础巩固——排序相关推荐

  1. [Java基础]比较器排序Comparator的使用

    代码如下: package ComparablePack;public class Student {private String name;private int age;public Studen ...

  2. [Java基础]自然排序Comparable的使用

    代码如下: package ComparablePack;public class Student implements Comparable<Student>{private Strin ...

  3. 【CXY】JAVA基础 之 Collections

    概述: 1.Collections(注意不是Collection,而是Collections,多了一个s) 2.它是一个集合工具类 3.方法分类:常规操作(查找,最大,最小等).排序.线程安全(同步) ...

  4. 【CXY】JAVA基础 之 Collection

    概述: 1.Collection java集合框架的根级接口(root interface) 2.常用子接口:List.Set.Queue,注意map是自成体系的 3.方法:新增.包含.遍历.交集.判 ...

  5. java 基础算法教程ppt,基础排序算法(附加java实现)

    七种最基本的排序算法:(面试必会!) 冒泡排序: 最基础的排序算法,从数列最前端开始,两两比较,如果前一个数比后一个数大,那么两个数就交换位置,经过一轮遍历之后,最大的数就到了数列的最后一个位置上,再 ...

  6. 【Java基础·Comparator多字段排序】

    [Java基础·Comparator多字段排序] 需求 对指定List按照 身份证号.姓名.入学时间倒序排列 版本1 package com.biaogexf.tools;import lombok. ...

  7. java基础—java内存模型(JMM)CPU架构、缓存一致性、重排序、JMM的实现、JMM保证可见性、有序性问题的详解

    java基础-JMM(CPU架构.JMM保证可见性.有序性) 文章目录 java基础-JMM(CPU架构.JMM保证可见性.有序性) CPU架构 说一说现在计算机存储器的结构层次 使用CPU缓存,会导 ...

  8. Java基础知识 21(Set集合,HashSet集合以及它的三种遍历方式(迭代器,增强for循环,forEach),LinkedHashSet集合,TreeSet集合(自然排序法,比较器排序法))

    Java基础知识 21 Set集合 Set集合:一个不包含重复元素的Collection集合,元素不重复,List集合是允许元素重复的. Set接口的三个字类:HashSet(),LinkedHash ...

  9. Java基础篇:常用类

    文章目录 1.字符串相关的类 1.1 String类及常用方法 String的特性 String对象的创建 字符串对象是如何存储的 String使用陷阱 String常用方法 1.2 StringBu ...

最新文章

  1. linux系统操作常见问题(ubuntu和opensuse)
  2. Open3D KdTree建立、3种近邻搜索及结果可视化
  3. BigdCIMAL类型数据的使用选择
  4. sqlite3 C接口基础
  5. php后台无法登入,PHP magento后台无法登录问题解决方法
  6. Dynamic Data Web Application编译是报GetActionPath调用模糊解决办法
  7. Linux C 服务器端这条线怎么走?
  8. Java中map关于putAll()和“=”的区别
  9. Jsp链接传值中文乱码问题解决
  10. php swfobject,SWFObject2.0两种调用方式
  11. 圣思园 java se_圣思园JavaSE视频笔记
  12. 汇编dos系统调用(输入输出篇)
  13. 松翰单片机--SN8F5702学习笔记(二)HelloWorld
  14. Cypress总结回顾
  15. C语言英尺和英寸换算米
  16. @Deprecated注解
  17. 微软的语音交互“滑铁卢”:Cortana小娜悲惨收场,未来路在何方?
  18. Js根据拼音首字母分组
  19. 基于FMC 接口的Xilinx FPGA XC7K325T PCIeX8 接口卡
  20. Ubuntu16.04下fctix无法切换中英文输入法

热门文章

  1. db2 导出换行_数据库 db2 换行符
  2. mysql ignore用法_php – 在某些条件下在一列上使用MySQL IGNORE
  3. 上海理工大学计算机专硕分数线,热门专业=毕业高薪?曾经的人热门计算机,如今却“前程堪忧”...
  4. struts mysql乱码_Struts+Hibernate+MyEclipse+Tomcat+MySQL的乱码之解决
  5. http 标准超时时间_Go 中 http 超时问题的排查
  6. pcie总线连接两台电脑_基于PCIE总线多主互连系统的设计与实现
  7. Android中发现java代码设置的字体过大
  8. Linux操作系统下/etc/hosts文件
  9. 中科院发布了目标追踪数据集,1万多条视频,150万个边界框 | 快来下载
  10. 陈天石吴翰清顾嘉唯光速对话(汤晓鸥今天没有晒娃)