排序算法-快速排序(Java)
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)的更多相关文章
- 基本排序算法——快速排序java实现
简单的快速排序算法,我竟然花费了如此多的时间来写作,好好学习. /** * */ package basic.sort; import java.util.Arrays; import java.ut ...
- 排序算法----快速排序java
快速排序是对冒泡排序的一种改进,平均时间复杂度是O(nlogn) import java.util.Arrays; import java.util.Scanner; public class tes ...
- 《Java算法》排序算法-快速排序
排序算法-快速排序: /** * 给定一个数组:按照从小到大排序. * 思路: * 1. 获取第一个数放入临时变量data,将大于data的数放右边,小于data的数放在左边. * 2. data左边 ...
- 常见排序算法(附java代码)
常见排序算法与java实现 一.选择排序(SelectSort) 基本原理:对于给定的一组记录,经过第一轮比较后得到最小的记录,然后将该记录与第一个记录的位置进行交换:接着对不包括第一个记录以外的其他 ...
- 几大排序算法的Java实现
很多的面试题都问到了排序算法,中间的算法和思想比较重要,这边我选择了5种常用排序算法并用Java进行了实现.自己写一个模板已防以后面试用到.大家可以看过算法之后,自己去实现一下. 1.冒泡排序:大数向 ...
- 7种基本排序算法的Java实现
7种基本排序算法的Java实现 转自我的Github 以下为7种基本排序算法的Java实现,以及复杂度和稳定性的相关信息. 以下为代码片段,完整的代码见Sort.java 插入排序 /** * 直接插 ...
- 几种简单的排序算法(JAVA)
几种排序算法(JAVA) 一.代码 package com.hdwang; import java.util.Arrays; /** * Created by admin on 2017/1/20. ...
- 常见排序算法总结 -- java实现
常见排序算法总结 -- java实现 排序算法可以分为两大类: 非线性时间比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此称为非线性时间比较类排序. 线性时间 ...
- 几大排序算法的Java实现(原创)
几大排序算法的Java实现 更新中... 注: 该类中附有随机生成[min, max)范围不重复整数的方法,如果各位看官对此方法有什么更好的建议,欢迎提出交流. 各个算法的思路都写在该类的注释中了,同 ...
- 数据结构和算法(Golang实现)(25)排序算法-快速排序
快速排序 快速排序是一种分治策略的排序算法,是由英国计算机科学家Tony Hoare发明的, 该算法被发布在1961年的Communications of the ACM 国际计算机学会月刊. 注:A ...
随机推荐
- windows上MongoDB远程访问配置
今天用另一台机器上的MongoDB,但是使用本地连接时,没问题 换成IP地址时,出现 解决的方法,修改配置文件 systemLog: destination: file path: d:/Mongod ...
- 记一次ssh.exec_command(cmd)执行后读取结果为空
# 连接跳板机,执行插标签 def con_tmp_machine(mobile_phoneno, myguid): keyfile = os.path.expanduser('/Users/kusy ...
- ubutun16.04 安装编译glog日志库
glog 是一个 C++ 日志库,它提供 C++ 流式风格的 API.在安装 glog 之前需要先安装 gflags,这样 glog 就可以使用 gflags 去解析命令行参数(可以参见gflags ...
- [转帖]linux lsof 用法简介
linux lsof 用法简介 https://www.cnblogs.com/saneri/p/5333333.html 1.简介: lsof(list open files)是一个列出当前系统打开 ...
- 基于verilog的分频器设计(半整数分频,小数分频:下)
第二种方法:对进行奇数倍n分频时钟,首先进行n/2分频(带小数,即等于(n-1)/2+0.5),然后再进行二分频得到.得到占空比为50%的奇数倍分频.下面讲讲进行小数分频的设计方法. 小数分频:首先讲 ...
- 使用SonarQube和SonarQube Scanner分析项目
一.概述 SonarQube的安装,请参考链接:https://www.cnblogs.com/xiao987334176/p/12011623.html 配置好sonar的服务端后,接下来就要使用s ...
- 单片机成长之路(51基础篇) - 026 基于stm89c52之单片机看门狗
基于stc89c52的看门狗,代码如下: main.c #include "stc89c5x_Quick_configuration.h" // 自定义头文件 #include & ...
- nginx 配置处理静态资源
前言:在一些中大型的网站中,都会专门配置一个处理静态资源的服务,下面我们来用NGINX实战配置下 配置静态资源的目的是为了加速静态资源的访问速度 比较简单,下面直接上配置了 以上就是文章内容的全部了
- 'while' statement cannot complete without throwing an exception
You are probably using Android Studio or IntelliJ. If so, you can add this above your method contain ...
- 简单的sql语句汇总(sqlserver)
1.修改字段的默认值 alter table 表名 add default 默认值 for 字段名称 例子: for Age; alter table 表名 add constraint DF_TAB ...