package com.rao.sort;

import java.util.Arrays;

/**
* @author Srao
* @className QuickSort
* @date 2019/12/9 14:13
* @package com.rao.sort
* @Description
*/
public class QuickSort { /**
* 把数组从中间分开,左边的数都小于pivot,右边的数都大于pivot
* @param arr:要拆分的数组
* @param left:从left开始计算
* @param right:到right截至
* @return 返回中间值的下标
*/
public static int partition(int[] arr, int left, int right){
//把数组中的第一个数当作pivot
int pivot = arr[left];
//左指针指向pivot右边的第一个数
int i = left+;
//指向数组末尾最后一个数
int j = right;
while (true){
//从左边开始,找到第一个比pivot大的数
while (i <= j && arr[i] <= pivot){
i++;
}
//从右边开始,找到第一个比pivot小的数
while (i <= j && arr[j] >= pivot){
j--;
}
if (i >= j){
break;
}
//交换上面两个数
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
//把pivot交换到数组中间,此时数组大致有序,以pivot为界限,左边的数都比pivot小,右边的数都比pivot大
arr[left] = arr[j];
arr[j] = pivot;
return j;
} /**
* 快速排序
* @param arr
* @param left
* @param right
*/
public static void quickSort(int[] arr, int left, int right){
//用来保存pivot的下标
int center;
if (left < right){
center = partition(arr, left, right);
quickSort(arr, left, center-);
quickSort(arr, center+, right);
}
} public static void main(String[] args) {
int[] arr = {, , , , };
System.out.println(Arrays.toString(arr));
quickSort(arr, , arr.length-);
System.out.println(Arrays.toString(arr)); }
}

快速排序和归并排序都是采用分治的思想,对数组进行拆分排序,但是快速排序再开辟一个新的数组保存数据,比归并排序节省空间,两个排序的平均时间复杂度都为O(nlogn)

排序算法-快速排序(Java)的更多相关文章

  1. 基本排序算法——快速排序java实现

    简单的快速排序算法,我竟然花费了如此多的时间来写作,好好学习. /** * */ package basic.sort; import java.util.Arrays; import java.ut ...

  2. 排序算法----快速排序java

    快速排序是对冒泡排序的一种改进,平均时间复杂度是O(nlogn) import java.util.Arrays; import java.util.Scanner; public class tes ...

  3. 《Java算法》排序算法-快速排序

    排序算法-快速排序: /** * 给定一个数组:按照从小到大排序. * 思路: * 1. 获取第一个数放入临时变量data,将大于data的数放右边,小于data的数放在左边. * 2. data左边 ...

  4. 常见排序算法(附java代码)

    常见排序算法与java实现 一.选择排序(SelectSort) 基本原理:对于给定的一组记录,经过第一轮比较后得到最小的记录,然后将该记录与第一个记录的位置进行交换:接着对不包括第一个记录以外的其他 ...

  5. 几大排序算法的Java实现

    很多的面试题都问到了排序算法,中间的算法和思想比较重要,这边我选择了5种常用排序算法并用Java进行了实现.自己写一个模板已防以后面试用到.大家可以看过算法之后,自己去实现一下. 1.冒泡排序:大数向 ...

  6. 7种基本排序算法的Java实现

    7种基本排序算法的Java实现 转自我的Github 以下为7种基本排序算法的Java实现,以及复杂度和稳定性的相关信息. 以下为代码片段,完整的代码见Sort.java 插入排序 /** * 直接插 ...

  7. 几种简单的排序算法(JAVA)

    几种排序算法(JAVA) 一.代码 package com.hdwang; import java.util.Arrays; /** * Created by admin on 2017/1/20. ...

  8. 常见排序算法总结 -- java实现

    常见排序算法总结 -- java实现 排序算法可以分为两大类: 非线性时间比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此称为非线性时间比较类排序. 线性时间 ...

  9. 几大排序算法的Java实现(原创)

    几大排序算法的Java实现 更新中... 注: 该类中附有随机生成[min, max)范围不重复整数的方法,如果各位看官对此方法有什么更好的建议,欢迎提出交流. 各个算法的思路都写在该类的注释中了,同 ...

  10. 数据结构和算法(Golang实现)(25)排序算法-快速排序

    快速排序 快速排序是一种分治策略的排序算法,是由英国计算机科学家Tony Hoare发明的, 该算法被发布在1961年的Communications of the ACM 国际计算机学会月刊. 注:A ...

随机推荐

  1. C# HTTP系列4 HttpWebRequest.CookieContainer属性

    系列目录     [已更新最新开发文章,点击查看详细] HttpWebRequest.CookieContainer 获取或设置与此请求关联的 Cookie.默认情况下CookieContainer  ...

  2. MYSQL插入千万数据的工具类

    建表语句 CREATE TABLE `test_id` ( `id` int(10) NOT NULL AUTO_INCREMENT COMMENT '主键自增非空', `name` varchar( ...

  3. proxy 简化版本

    public interface People { public String eat(String param); } public class Jack implements People { @ ...

  4. TCP连接的建立(三次握手和四次挥手)

    写到最后发现我描述的挺水的,这个老哥的用语比较专业一点https://blog.csdn.net/qq_38950316/article/details/81087809  (老哥这篇有些许错别字 大 ...

  5. centos7 安装docker(手动和脚本安装)换源 卸载

    centos7 安装docker(手动和脚本安装)换源 卸载 Docker 要求 CentOS 系统的内核版本高于 3.10 ,查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker ...

  6. ElasticSearch6.3.2 集群做节点冷(warm) 热(hot) 分离

    拿一个小规模的5节点ES集群做冷热分离尝试,它上面已经有60多个索引,有些索引按月.每月生成一个索引,随着数据的不断写入,历史数据(只需保留三个月数据,三个月之前的数据视为历史数据)越来越占磁盘空间和 ...

  7. 乘法器——booth编码

    博主最近在学习加法器.乘法器.IEEE的浮点数标准,作为数字IC的基础.当看到booth编码的乘法器时,对booth编码不是很理解,然后在网上找各种理解,终于豁然开朗.现将一个很好的解释分享给大家,希 ...

  8. SQL Date 时间类型处理

    SQL 日期(Dates)   2019-10-17 22:17:26 当我们处理日期时,最难的任务恐怕是确保插入的日期的格式,与数据库中日期列的格式相匹配. 保存的如果是日期部分,查询不会有太大问题 ...

  9. python 数据结构之图的储存方式

    参考链接:https://blog.csdn.net/u014281392/article/details/79120406 所描述的图的结构为: 下面介绍不同的储存方式,我想不必详细分别是每个名称都 ...

  10. JavaScript 总结[目录]

    ECMAScript 基础 一.JavaScript 基础 1.1 JavaScript 简介 1.2 JavaScript 书写位置 二.JavaScript 数据类型 2.1 JavaScript ...