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实现的更多相关文章

  1. 快排的java实现方式,用java代码来实现快排

    1. 快排的思想 通过一趟排序将要排序的数据分割成独立的两部分,前一部分的所有数据都要小于后一部分的所有数据,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据的 ...

  2. 快排算法Java版-每次以最左边的值为基准值手写QuickSort

    如题 手写一份快排算法. 注意, 两边双向找值的时候, 先从最右边起找严格小于基准值的值,再从最左边查找严格大于基准base的值; 并且先右后左的顺序不能反!!这个bug改了好久,233~ https ...

  3. 排序--QuickSort 快排

    Quick の implementation 快排,就像它的名字一定,风一样的快.基本上算是最快的排序算法了.快排的基本思想是选择一个切分的元素.把这个元素排序了.所有这个元素左边的元素都小于这个元素 ...

  4. 天天算法————快排及java实现。

    快排说的很邪乎,原理懂了,实现自然也就出来了: public void static quickSorted( int[] a ,int low ,int high){ //递归结束条件 if(low ...

  5. quicksort快排

    废话不多说,上代码: void quicksort(int x[], int lo, int hi){ int i = lo, j = hi; ]; while(i <= j){ while(x ...

  6. 折半、快排、插入排序的Java实现

    插入排序 import java.util.Arrays; public class InsertionSort { /** * 对数组里面进行插入排序 * 参数1 数组 * 参数2 数组大小 */ ...

  7. 快排 - 快速排序算法 (Chinar出品 简单易懂)

    Quicksort 快排的简单讲解 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- ...

  8. Java常见的几种排序算法-插入、选择、冒泡、快排、堆排等

    本文就是介绍一些常见的排序算法.排序是一个非常常见的应用场景,很多时候,我们需要根据自己需要排序的数据类型,来自定义排序算法,但是,在这里,我们只介绍这些基础排序算法,包括:插入排序.选择排序.冒泡排 ...

  9. 快排+java实现

    import java.util.Arrays; public class QuickSort { //三数取中法.取出不大不小的那个位置 public static int getPivotPos( ...

随机推荐

  1. LC 660. Remove 9 【lock, hard】

    Start from integer 1, remove any integer that contains 9 such as 9, 19, 29... So now, you will have ...

  2. Badge 标记

    出现在按钮.图标旁的数字或状态标记. 基础用法 展示新消息数量. 定义value属性,它接受Number或者String. <el-badge :value="12" cla ...

  3. phpStudy本地搭建wordpress教程

    一.启用phpStudy环境包 phpStudy简单易用,一键启动配置本地环境; 二.wordpress博客程序 登陆wordpress官网下载最新程序,解压后提取wordpress目录下全部文件到p ...

  4. redis内存分配管理与集群环境下Session管理

    ##################内存管理############### 1.Redis的内存管理 .与memcache不同,没有实现自己的内存池 .在2..4以前,默认使用标准的内存分配函数(li ...

  5. 解决 ElementTree 无法处理中文

    解决 ElementTree 无法处理中文,UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position 76-99: o ...

  6. jsonp 原理 并模拟实现一个简单的jsonp

    jsonp产生的背景 1.从原网站向目标网站(服务端)发送ajax请的时候,由于浏览器的安全策略(这两个网站只要域名,端口,协议 有一个不同就不允许请求访问)导致跨域,从而请求无法正常进行. 2.We ...

  7. jenkins介绍及其简单操作

    一.jenkins简介 Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能. Jenkins功能包 ...

  8. CDH spark 命令行测试

    一. 参考 https://www.cnblogs.com/bovenson/p/5801536.html [root@node- test]# chown hdfs:hdfs /root/test/ ...

  9. charles获取抓包数据

    charles获取抓包数据 第一步:确保手机和电脑处于同一个局域网之下 第二步:进入 charles 的代理设定选项(主导航栏Proxy-----Proxy Setting......)中,允许代理, ...

  10. 【MM系列】SAP ABAP 编辑字段出现:对象编辑中的错误

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP ABAP 编辑字段出现: ...