QuickSort(快排)的JAVA实现
QuickSort的JAVA实现
这是一篇算法课程的复习笔记
用JAVA对快排又实现了一遍。

先实现的是那个easy版的,每次选的排序轴都是数组的最后一个:
package com.algorithms.jiading.www;
import java.io.*;
import java.util.ArrayList;
/*
这是quicksort的java实现:version1,每次选择最后的元素为spilt的中心
*/
public class quickSort {
public void exchange(ArrayList<Integer> element, int firstIndex, int secondIndex){
Integer temp = element.get(firstIndex);
element.set(firstIndex,element.get(secondIndex));
element.set(secondIndex,temp);
return;
}
public int findCenter(ArrayList<Integer> element,int begin,int end){
int i=begin-1;
int endValue=element.get(end);
for(int j=begin;j<end;j++){
if(element.get(j)<endValue){
i++;
exchange(element,i,j);
}
}
exchange(element,i+1,end);
return i+1;
}
public void myQuicksort(ArrayList<Integer> element,int begin,int end){
if(end-begin==1){
if(element.get(end)<element.get(begin))
exchange(element,begin,end);
}
else if(begin<end){
int center=findCenter(element,begin,end);
myQuicksort(element,begin,center-1);
myQuicksort(element,center+1,end);
}
return;
}
public static void main(String[] args) {
ArrayList<Integer> element=new ArrayList<Integer>();
try {
//在project中,相对路径的根目录是project的根文件夹
InputStream is=new FileInputStream("src/com/algorithms/jiading/www/number.properties");
BufferedReader reader=new BufferedReader(new InputStreamReader(is));
String tempString = reader.readLine();
String[] split = tempString.split(",");
for (String toInt:split
) {
element.add(Integer.parseInt(toInt));
}
/*
main方法里面调用非静态方法时,需要new一个对象,因为静态方法,静态类属于模板,非静态类和方法属于对象。
*/
quickSort qq=new quickSort();
qq.myQuicksort(element,0,element.size()-1);
for (Integer i:element
) {
System.out.println(i);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
之后换成使用随机数获取排序轴的算法:

修改的部分:
public int findCenterOriginal(ArrayList<Integer> element,int begin,int end){
int i=begin-1;
int endValue=element.get(end);
for(int j=begin;j<end;j++){
if(element.get(j)<endValue){
i++;
exchange(element,i,j);
}
}
exchange(element,i+1,end);
return i+1;
}
public int findCenter(ArrayList<Integer>element,int begin,int end){
//不用currentTimeMillis的原因是:当多线程调用时,由于CPU速率很快,因此currentTimeMillis很可能相等,使得随机数结果也会相等
//nanoTime()返回最准确的可用系统计时器的当前值,以毫微秒为单位。此方法只能用于测量已过的时间,与系统或钟表时间的其他任何时间概念无关。
long seed=System.nanoTime();
Random rd=new Random(seed);
int point=(rd.nextInt(end)%(end-begin+1))+begin;
exchange(element,point,end);
return findCenterOriginal(element,begin,end);
}
QuickSort(快排)的JAVA实现的更多相关文章
- 快排的java实现方式,用java代码来实现快排
1. 快排的思想 通过一趟排序将要排序的数据分割成独立的两部分,前一部分的所有数据都要小于后一部分的所有数据,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据的 ...
- 快排算法Java版-每次以最左边的值为基准值手写QuickSort
如题 手写一份快排算法. 注意, 两边双向找值的时候, 先从最右边起找严格小于基准值的值,再从最左边查找严格大于基准base的值; 并且先右后左的顺序不能反!!这个bug改了好久,233~ https ...
- 排序--QuickSort 快排
Quick の implementation 快排,就像它的名字一定,风一样的快.基本上算是最快的排序算法了.快排的基本思想是选择一个切分的元素.把这个元素排序了.所有这个元素左边的元素都小于这个元素 ...
- 天天算法————快排及java实现。
快排说的很邪乎,原理懂了,实现自然也就出来了: public void static quickSorted( int[] a ,int low ,int high){ //递归结束条件 if(low ...
- quicksort快排
废话不多说,上代码: void quicksort(int x[], int lo, int hi){ int i = lo, j = hi; ]; while(i <= j){ while(x ...
- 折半、快排、插入排序的Java实现
插入排序 import java.util.Arrays; public class InsertionSort { /** * 对数组里面进行插入排序 * 参数1 数组 * 参数2 数组大小 */ ...
- 快排 - 快速排序算法 (Chinar出品 简单易懂)
Quicksort 快排的简单讲解 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- ...
- Java常见的几种排序算法-插入、选择、冒泡、快排、堆排等
本文就是介绍一些常见的排序算法.排序是一个非常常见的应用场景,很多时候,我们需要根据自己需要排序的数据类型,来自定义排序算法,但是,在这里,我们只介绍这些基础排序算法,包括:插入排序.选择排序.冒泡排 ...
- 快排+java实现
import java.util.Arrays; public class QuickSort { //三数取中法.取出不大不小的那个位置 public static int getPivotPos( ...
随机推荐
- Linux 多线程按照线程顺序打印字符
#include <stdio.h> #include <pthread.h> #include <unistd.h> ; pthread_mutex_t mute ...
- 2018-2019-2 20165215《网络对抗技术》Exp9 :Web安全基础
目录 实验目的及内容 实验过程记录 一.Webgoat安装 二. 注入缺陷(Injection Flaws) (一)命令注入(Command Injection) (二)数字型注入(Numeric S ...
- python3笔记十六:python匿名函数和高阶函数
一:学习内容 lambda函数 map函数与reduce函数 filter函数 sorted函数 二:匿名函数-lambda 1.概念:不使用def这样的语句去定义函数,使用lambda来创建匿名函数 ...
- koa 基础(二十二)封装 DB 库 --- 测试
1.根目录/module/config.js /** * 配置文件 */ var app = { dbUrl: 'mongodb://127.0.0.1:27017/?gssapiServiceNam ...
- 一、基础篇--1.2Java集合-HashMap死循环问题
为什么HashMap会出现死循环 首先,我们知道java的HashMap不是线程安全的.多线程下应该使用ConcurrentHashMap. HashMap底层是基于动态数组和单向链表(JDK1.7, ...
- Spring Bean学习创建及使用<一>
转自:http://glzaction.iteye.com/blog/1299441 Spring中依赖注入有三种注入方式: 一.构造器注入: 二.设值注入(setter方式注入): 三.Feild方 ...
- kubernetes学习:CKA考试认证
考点 CKA认证针对考核成为当业界的Kubernetes管理员所需的技能. CKA认证考试包括这些一般领域及其在考试中的权重: 应用程序生命周期管理 - 8% 安装.配置和验证 - 12% 核心概 ...
- xaml中显示 “大括号左边” 文本
Content="{}{" 最合适的还是上面的写法 转义符{不好使的 要么 空格{ 要么 全角{ 要么binding
- java:redis(java代码操作redis,实体类mapper生成器(generator))
1.redis_demo Maven ItemMapper.xml: <?xml version="1.0" encoding="UTF-8" ?> ...
- office web apps安装部署,配置https,负载均衡(四)安装office web apps相关软件
前提条件: 1.一台windows server 2008R2服务器,并且已经配置了域: 服务器连接域控制器的相关文档,请查看上一篇文章: office web apps安装部署,配置https,负载 ...