java快排(两种方法)
快排是最基础的排序算法之一,今天来回顾一下。
public class QuickSort {
public static void quickSort(int[] array){
if(array != null){
quickSort(array, 0, array.length-1);
}
}
private static void quickSort(int[] array,int beg,int end){
if(beg >= end || array == null)
return;
int p = partition(array, beg, end);
quickSort(array, beg, p-1);
quickSort(array, p+1, end);
}
}
以上就是快排的整体框架,最重要的就是partition方法,它是划分并找到下次分割排序的位置P常用的方法
private static int partition(int[] array, int beg, int end) {
int first = array[beg];
int i = beg, j = end;
while (i < j) {
while (array[i] <= first && i < end) {
i++;
}
while (array[j] > first && j >= beg) {
j--;
}
if (i < j) {
array[i] = array[i] ^ array[j];
array[j] = array[i] ^ array[j];
array[i] = array[i] ^ array[j];
}
}
if (j != beg) {
array[j] = array[beg] ^ array[j];
array[beg] = array[beg] ^ array[j];
array[j] = array[beg] ^ array[j];
}
return j;
}
第二种partition方法实现:
private static int partition(int[] array,int beg,int end){
int last = array[end];
int i = beg - 1;
for(int j = beg;j<=end-1;j++){
if(array[j]<=last){
i++;
if(i!=j){
array[i]=array[i]^array[j];
array[j]=array[i]^array[j];
array[i]=array[i]^array[j];
}
}
}
if((i+1)!=end){
array[i+1] = array[i+1]^array[end];
array[end] = array[i+1]^array[end];
array[i+1] = array[i+1]^array[end];
}
return i+1;
}
java快排(两种方法)的更多相关文章
- ubuntu 安装JAVA jdk的两种方法:
ubuntu 安装jdk 的两种方式: 1:通过ppa(源) 方式安装. 2:通过官网下载安装包安装. 这里推荐第1种,因为可以通过 apt-get upgrade 方式方便获得jdk的升级 使用pp ...
- java循环HashMap两种方法的效率比较
一.循环HashMap的两种方式 方式1: Iterator<Entry<String, String>> entryKeyIterator = entrySetMap.ent ...
- Java对象排序两种方法
转载:https://blog.csdn.net/wangtaocsdn/article/details/71500500 有时候需要对对象列表或数组进行排序,下面提供两种简单方式: 方法一:将要排序 ...
- java异常处理的两种方法
一种是try-catch-finally,监视代码段,如果有异常就捕获. 另一种是此处不处理,声明在方法后面,抛给上级.(不处理也是一种处理)
- java连接数据库的两种方法总结
方法一:使用jdbc-odbc桥连接sql server,作为中间媒介连接数据库 1.配置数据源:打开控制面版->管理工具->数据源(ODBC)->选用户DSN,按下添加按钮-> ...
- Java 创建线程的两种方法
Java提供了线程类Thread来创建多线程的程序.其实,创建线程与创建普通的类的对象的操作是一样的,而线程就是Thread类或其子类的实例对象.每个Thread对象描述了一个单独的线程.要产生一个线 ...
- Java 动态代理 两种实现方法
AOP的拦截功能是由java中的动态代理来实现的.说白了,就是在目标类的基础上增加切面逻辑,生成增强的目标类(该切面逻辑或者在目标类函数执行之前,或者目标类函数执行之后,或者在目标类函数抛出异常时候执 ...
- 【java基础 13】两种方法判断hashmap中是否形成环形链表
导读:额,我介绍的这两种方法,有点蠢啊,小打小闹的那种,后来我查了查资料,别人都起了好高大上的名字,不过,本篇博客,我还是用何下下的风格来写.两种方法,一种是丢手绢法,另外一种,是迷路法. 这两种方法 ...
- Java构造和解析Json数据的两种方法详解二
在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别.下面接着介绍用org.json构造和解析Jso ...
- Java 获取*.properties配置文件中的内容 ,常见的两种方法
import java.io.InputStream; import java.util.Enumeration; import java.util.List; import java.util.Pr ...
随机推荐
- CodeForces - 961D:Pair Of Lines (几何,问两条直线是否可以覆盖所有点)
You are given n points on Cartesian plane. Every point is a lattice point (i. e. both of its coordin ...
- jquery-post 异常
报错:Client closed connection before receiving entire response 前端请求: $.ajax({ type : 'POST' , url : '/ ...
- PostgreSQL 数据库角色
数据库角色PostgreSQL使用角色的概念管理数据库访问权限.一个角色可以被看成是一个数据库用户或者是一个数据库用户组,这取决于角色被怎样设置.角色可以拥有数据库对象(例如,表和函数)并且能够把那些 ...
- Redis codis 搭建测试
codis Codis 是一个分布式 Redis 解决方案, 对于上层的应用来说, 连接到 Codis Proxy 和连接原生的 Redis Server 没有明显的区别,有部分命令支持 Codis ...
- 【OpenCV】图像代数运算:平均值去噪,减去背景
代数运算,就是对两幅图像的点之间进行加.减.乘.除的运算.四种运算相应的公式为: 代数运算中比较常用的是图像相加和相减.图像相加常用来求平均值去除addtive噪声或者实现二次曝光(double-ex ...
- spring--AOP--权限---demo1---bai
AOP权限DEMO1: 实体类: package com.etc.entity; import org.aspectj.lang.annotation.Pointcut; public class U ...
- C Primer Plus学习笔记(三)- 字符串和格式化输入/输出
从一个简单的例子开始 #include <stdio.h> int main() { char name[10]; printf("Input Your Name:\n" ...
- C#的颜色解析及操作和相关Brush
一.颜色表示方式 // // Summary: // Creates a System.Drawing.Color structure from a 32-bit ARGB value. // // ...
- CSS——display
display的主要属性: 1.none: 不显示: 不保留其在页面中的位置,即相当于html文档中没有这个元素: visible:hidden虽然也不显示:但依然保存着他的位置和大小. 2.bloc ...
- Delphi Cookie
Cookie IdHTTP1.CookieManager.AddCookies(); IdHTTP1.Post(); IdHTTP1.Get('http://1.1.1.1:9000/'); for ...