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. spring-jms,spring-boot-starter-activemq JmsTemplate 发送方式

    spring-jms,spring-boot-starter-activemq JmsTemplate 发送方式 背景: 原来我准备是setDefaultDestinationName 设置队列的名称 ...

  2. php执行方式对比:mod_php&php-fpm

    mod_php 1.是apache的附属包,apache死掉后php也会死掉 2.稳定性差,php出错服务器进程也会受影响 php-fpm       1.和nginx是两个独立的个体. 2.php- ...

  3. iOS即时通讯之CocoaAsyncSocket源码解析三

    原文 前言 本文实例Github地址:即时通讯的数据粘包.断包处理实例. 本文旨以实例的方式,使用CocoaAsyncSocket这个框架进行数据封包和拆包.来解决频繁的数据发送下,导致的数据粘包.以 ...

  4. Android jni/ndk编程二:jni数据类型转换(primitive,String,array)

    一.数据类型映射概述 从我们开始jni编程起,就不可能避开函数的参数与返回值的问题.java语言的数据类型和c/c++有很多不同的地方,所以我们必须考虑当在java层调用c/c++函数时,怎么正确的把 ...

  5. 淘宝TAE平台定时任务包的部署步骤

    淘宝TAE平台定时任务包的部署: 第一步:首先把自己的任务打包成一个jar包.使用maven打包的命令为:mvn clean install 第二步:把任务jar包依赖的jar包全部导出来.使用mav ...

  6. Dev中GridView——背景颜色改变

    DevExpress.XtraGrid.Views 设置指定行的背景颜色 1.事件:CustomDrawCell2.示例: private void gridView1_CustomDrawCell( ...

  7. mysql|full join 多表联查,系统报错,无法解答!

    查询语句: select 分数 from cfull join don c.姓名=d.姓名 报错: [Err] 1054 - Unknown column 'c.姓名' in 'on clause' ...

  8. css实现左侧固定宽度,右侧宽度自适应

    #centerDIV { height: 550px; width: 100%; } #mainDIV { height: 100%; border: 1px solid #F00; margin-l ...

  9. 阶段3 3.SpringMVC·_04.SpringMVC返回值类型及响应数据类型_6 响应json数据之过滤静态资源

    先搭建环境 webapp目录下创建js的文件夹.然后里面引入jquery.min.js这个文件. 页面引入这个js文件 先alert弹窗做测试 服务器重新部署 点击ajax的按钮 并没有起作用 我们在 ...

  10. 阶段3 3.SpringMVC·_04.SpringMVC返回值类型及响应数据类型_5 响应之使用forward和redirect进行页面跳转

    这个方式用的比较少. forward 转发或者重定向 返回forward关键字就表现现在想使用的就是请求转发 redirect