Java基础巩固——排序
快速排序
基本思想:
通过一趟排序将待排序记录分割成独立的两部分,其中一部分记录的关键字均比另一部分关键字小,则分别对两部分继续进行排序,直到整个序列有序。
实例:
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基础巩固——排序相关推荐
- [Java基础]比较器排序Comparator的使用
代码如下: package ComparablePack;public class Student {private String name;private int age;public Studen ...
- [Java基础]自然排序Comparable的使用
代码如下: package ComparablePack;public class Student implements Comparable<Student>{private Strin ...
- 【CXY】JAVA基础 之 Collections
概述: 1.Collections(注意不是Collection,而是Collections,多了一个s) 2.它是一个集合工具类 3.方法分类:常规操作(查找,最大,最小等).排序.线程安全(同步) ...
- 【CXY】JAVA基础 之 Collection
概述: 1.Collection java集合框架的根级接口(root interface) 2.常用子接口:List.Set.Queue,注意map是自成体系的 3.方法:新增.包含.遍历.交集.判 ...
- java 基础算法教程ppt,基础排序算法(附加java实现)
七种最基本的排序算法:(面试必会!) 冒泡排序: 最基础的排序算法,从数列最前端开始,两两比较,如果前一个数比后一个数大,那么两个数就交换位置,经过一轮遍历之后,最大的数就到了数列的最后一个位置上,再 ...
- 【Java基础·Comparator多字段排序】
[Java基础·Comparator多字段排序] 需求 对指定List按照 身份证号.姓名.入学时间倒序排列 版本1 package com.biaogexf.tools;import lombok. ...
- java基础—java内存模型(JMM)CPU架构、缓存一致性、重排序、JMM的实现、JMM保证可见性、有序性问题的详解
java基础-JMM(CPU架构.JMM保证可见性.有序性) 文章目录 java基础-JMM(CPU架构.JMM保证可见性.有序性) CPU架构 说一说现在计算机存储器的结构层次 使用CPU缓存,会导 ...
- Java基础知识 21(Set集合,HashSet集合以及它的三种遍历方式(迭代器,增强for循环,forEach),LinkedHashSet集合,TreeSet集合(自然排序法,比较器排序法))
Java基础知识 21 Set集合 Set集合:一个不包含重复元素的Collection集合,元素不重复,List集合是允许元素重复的. Set接口的三个字类:HashSet(),LinkedHash ...
- Java基础篇:常用类
文章目录 1.字符串相关的类 1.1 String类及常用方法 String的特性 String对象的创建 字符串对象是如何存储的 String使用陷阱 String常用方法 1.2 StringBu ...
最新文章
- linux系统操作常见问题(ubuntu和opensuse)
- Open3D KdTree建立、3种近邻搜索及结果可视化
- BigdCIMAL类型数据的使用选择
- sqlite3 C接口基础
- php后台无法登入,PHP magento后台无法登录问题解决方法
- Dynamic Data Web Application编译是报GetActionPath调用模糊解决办法
- Linux C 服务器端这条线怎么走?
- Java中map关于putAll()和“=”的区别
- Jsp链接传值中文乱码问题解决
- php swfobject,SWFObject2.0两种调用方式
- 圣思园 java se_圣思园JavaSE视频笔记
- 汇编dos系统调用(输入输出篇)
- 松翰单片机--SN8F5702学习笔记(二)HelloWorld
- Cypress总结回顾
- C语言英尺和英寸换算米
- @Deprecated注解
- 微软的语音交互“滑铁卢”:Cortana小娜悲惨收场,未来路在何方?
- Js根据拼音首字母分组
- 基于FMC 接口的Xilinx FPGA XC7K325T PCIeX8 接口卡
- Ubuntu16.04下fctix无法切换中英文输入法
热门文章
- db2 导出换行_数据库 db2 换行符
- mysql ignore用法_php – 在某些条件下在一列上使用MySQL IGNORE
- 上海理工大学计算机专硕分数线,热门专业=毕业高薪?曾经的人热门计算机,如今却“前程堪忧”...
- struts mysql乱码_Struts+Hibernate+MyEclipse+Tomcat+MySQL的乱码之解决
- http 标准超时时间_Go 中 http 超时问题的排查
- pcie总线连接两台电脑_基于PCIE总线多主互连系统的设计与实现
- Android中发现java代码设置的字体过大
- Linux操作系统下/etc/hosts文件
- 中科院发布了目标追踪数据集,1万多条视频,150万个边界框 | 快来下载
- 陈天石吴翰清顾嘉唯光速对话(汤晓鸥今天没有晒娃)