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. IDEA2019 JFormDesigner-6.0.6.2-intellij-idea破解版

    IDEA2019 JFormDesigner-6.0.6.2-intellij-idea破解版 下载链接:百度云 提取码:10ox 下载完后通过idea的本地磁盘安装即可

  2. docker启动常见报错

    Docker启动时的报错汇总 22017.11.10 16:30:29字数 575阅读 27184 八个Docker常见故障 https://mp.weixin.qq.com/s/2GNKmRJtBG ...

  3. 模拟LinkedList

    Linkedlist是一个集合容器,具有增删改查基本功能,本例中模拟增删查,对于修改,只需要将原节点处的val更新为新值即可,增加和删除在链表中速度是比较快的,查找,修改慢,因为要从头或者从尾开始遍历 ...

  4. koa 项目实战(三)创建测试接口和用户模型

    1.创建测试接口,并引入用户模型 根目录/routes/api/users.js const Router = require('koa-router'); const router = new Ro ...

  5. cygwin执行.py提示找不到模块,但已经安装模块的解决办法

    . 在解决了cygwin中make命令不能使用的问题之后(https://www.cnblogs.com/zhenggege/p/10724122.html),make maskrcnn路径下的set ...

  6. Runtime 源码阅读

    Runtime 属性说明 /** * 每一个 Java 应用程序都有一个关联的运行时对象 * * @author unascribed * @see java.lang.Runtime#getRunt ...

  7. python3 http.server 本地服务支持跨域

    创建start.py,代码如下: #!/usr/bin/env python try: # Python 3 from http.server import HTTPServer, SimpleHTT ...

  8. LC 877. Stone Game

    Alex and Lee play a game with piles of stones.  There are an even number of piles arranged in a row, ...

  9. ArrayList去除集合中字符串的重复值

    package com.heima.list; import java.util.ArrayList; import java.util.Iterator; import java.util.List ...

  10. layui 数据表格复选框实现单选功能

    //点击选中(单选)//单击行勾选checkbox事件 $(document).on("click",".layui-table-body table.layui-tab ...