import java.io.UnsupportedEncodingException;
import java.util.*; public class Hello {
public static void main(String[] args) throws UnsupportedEncodingException {
int number = 100000;
int [] randm_number = new int[number];
Random random = new Random();
for (int i = 0;i<number;i++){
randm_number[i] = random.nextInt(number);
}
System.out.println(Arrays.toString(randm_number)); //经典:
long start1 = System.currentTimeMillis();
QuickSort(randm_number,0,randm_number.length -1);
long end1 = System.currentTimeMillis();
System.out.println(end1 - start1); //冒泡:
long start2 = System.currentTimeMillis();
BubbleSort(randm_number);
long end2 = System.currentTimeMillis();
System.out.println(end2 - start2); //新快速
long start3 = System.currentTimeMillis();
Arrays.sort(randm_number);
long end3 = System.currentTimeMillis();
System.out.println(end3 - start3); System.out.println(Arrays.toString(randm_number)); } /**
* 冒泡
* @param array
*/
public static void BubbleSort(int[] array){
for (int i = 0;i<array.length -1;i++){
for (int j=0;j<array.length - i -1;j++){
if (array[j]<array[j+1]){
int tmp = array[j];
array[j] = array[j+1];
array[j+1] = tmp;
}
}
}
} /**
* 经典快排
* @param array
* @param L
* @param R
*/
public static void QuickSort(int[] array,int L ,int R){
if (L >= R){
return;
}
int left = L, right = R;
int poivot = array[left]; while (left < right){
while (left < right && array[right] >= poivot) {
right--;
}
if (left < right){
array[left] = array[right];
}
while (left < right && array[left] <= poivot){
left++;
}
if (left < right){
array[right] = array[left];
}
if (left >= right){
array[left] = poivot;
}
}
QuickSort(array, L,right-1);
QuickSort(array,right+1, R);
}
}

结果:

089, 81236, 3234, 71171, 78906, 67248, 81941, 24658, 84343, 35482, 50401, 57262, 42241, 984, 66610, 92974, 37661, 61599, 96782, 14025,
95
11074
4
[2, 3, 7, 7, 8, 10, 11, 11, 12, 13, 14, 15, 15, 16, 16, 17, 17, 19, 19, 19, 21, 21, 22, 22, 22, 22, 24, 24, 24, 24, 34, 37, 37, 39,

评价:
通过性能测试结果可以看出:冒泡排序的效率最低;DualPivotQuicksort的效率最高。

通过网络资料和jdk1.8的排序实现方式上可以看出,新版的快排在经典快排的基础上增加了poivot分隔点,将原来的入参数组一个分给点分成两份,改为了两个分隔点分成三份。

对于一次array[i]的访问可看做一次元素扫描,在内存频率提升不如cpu提升效率高的今天,降低元素扫描次数即可提升整个排序效率

Java排序算法 [选择、冒泡、快排]的更多相关文章

  1. Java写 插入 选择 冒泡 快排

    /** * Created by wushuang on 2014/11/19. */ public class SortTest { @Test public void mainTest() { i ...

  2. Java排序算法之冒泡、选择、插入、快速

    JavaSort Java经典排序算法代码 2018-1-26更新:冒泡排序,选择排序,插入排序,快速排序 1. 冒泡排序 特点:效率低,实现简单 思想(从小到大排): 第1个数和第2个数比较,如果第 ...

  3. Java排序算法——选择排序

    import java.util.Arrays; //================================================= // File Name : Select_S ...

  4. java排序算法-选择排序

    public class SelectionSort { private static void selectSortTest() { int[] sortArray = { 5, 2, 4, 1, ...

  5. C++学习(三十八)(C语言部分)之 排序(冒泡 选择 插入 快排)

    算法是解决一类问题的方法排序算法 根据元素大小关系排序 从小到大 从大到小冒泡 选择 插入 快排希尔排序 归并排序 堆排序 冒泡排序 从头到尾比较 每一轮将最大的数沉底 或者最小数字上浮 选择排序 1 ...

  6. Shell数组以及排序算法(冒泡、直接选择、反转)

    Shell数组以及排序算法(冒泡.直接选择.反转) 目录 Shell数组以及排序算法(冒泡.直接选择.反转) 一.数组概述 1. 数组的定义 2. 下标的定义 3. 数组的特点 4. 数组定义的方法 ...

  7. java排序算法(二):直接选择排序

    java排序算法(二) 直接选择排序 直接选择排序排序的基本操作就是每一趟从待排序的数据元素中选出最小的(或最大的)一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完,它需要经过n- ...

  8. javascript数据结构与算法--基本排序算法(冒泡、选择、排序)及效率比较

    javascript数据结构与算法--基本排序算法(冒泡.选择.排序)及效率比较 一.数组测试平台. javascript数据结构与算法--基本排序(封装基本数组的操作),封装常规数组操作的函数,比如 ...

  9. Java排序算法之直接选择排序

    Java排序算法之直接选择排序 基本过程:假设一序列为R[0]~R[n-1],第一次用R[0]和R[1]~R[n-1]相比较,若小于R[0],则交换至R[0]位置上.第二次从R[1]~R[n-1]中选 ...

随机推荐

  1. MyBatis框架之异常处理

    MyBatis框架定义了许多的异常类,之所以定义这么多的异常类,应该是将每一种异常情况都独立出来,这样在出现异常时,定位就很明确了.而我们平时写代码时,都是瞎搞一通,异常类大多也是随便定义,或者是使用 ...

  2. 如何通过Dataphin构建数据中台新增100万用户?

    欢迎来到数据中台小讲堂!这一期我们来看看,作为阿里巴巴数据中台(OneData - OneModel.OneID.OneService)方法论的产品载体,Dataphin如何帮助传统零售企业实现数字化 ...

  3. 【BZOJ2639】矩形计算(二维普通莫队)

    题意:输入一个n*m的矩阵,矩阵的每一个元素都是一个整数,然后有q个询问,每次询问一个子矩阵的权值. 矩阵的权值是这样定义的,对于一个整数x,如果它在该矩阵中出现了p次,那么它给该矩阵的权值就贡献p^ ...

  4. 【靶场练习_sqli-labs】SQLi-LABS Page-2 (Adv Injections)

    Less-21:括号+单引号绕过+base64cookie编码 总感觉我已经把sql注入做成代码审计了:P <?php //including the Mysql connect paramet ...

  5. PHP之GET和POST小结

    PHP之GET和POST小结 PHP $_GET 变量 $_GET 变量 预定义的 $_GET 变量用于收集来自 method="get" 的表单中的值. 从带有 GET 方法的表 ...

  6. 服务器上的 IPProxy代理设置

    1.window 平台 CCProxy 安装包 传送门: http://www.xue51.com/soft/2794.html 该页面详细的说明了ccproxy怎么安装.怎么破jie.... 下面老 ...

  7. 安装maven之后,cmd提示mvn不是内部命令的解决办法

    1.maven的安装教程 下载地址为:http://maven.apache.org/download.cgi 进入此页面之后 点击下载,然后解压,我把目录名改为maven,目录结构如下图所示 下面我 ...

  8. Docker 进入容器的4种方法

    在使用Docker创建了容器之后,大家比较关心的就是如何进入该容器了,其实进入Docker容器有好几多种方式,这里我们就讲一下常用的几种进入Docker容器的方法. 进入Docker容器比较常见的几种 ...

  9. sql:CallableStatement执行存储过程

    /** * 使用CablleStatement调用存储过程 * @author APPle * */ public class Demo1 { /** * 调用带有输入参数的存储过程 * CALL p ...

  10. GET和POST的数据传递到底有何区别?

    1. GET和POST与数据如何传递没有关系 GET和POST是由HTTP协议定义的.在HTTP协议中,Method和Data(URL, Body, Header)是正交的两个概念,也就是说,使用哪个 ...