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. leetcode简单刷题

    [python3]参数中的冒号与箭头 冒号后面是建议传入的参数类型 箭头后面是建议函数返回的类型

  2. 10.14 socket 网络编程

    简单的例子 socket客户端 import socket client = socket.socket() #声明socket类型,同时生成socket连接对象 client.connect(('l ...

  3. python3下tomorow模块报语法错误def async(n, base_type, timeout=None): ^ SyntaxError: invalid syntax

    python3 pip 安装tomorrow模块,调用时候会报错:def async(n, base_type, timeout=None): ^ SyntaxError: invalid synta ...

  4. 2018-2019-2 20175203 实验四《Android 开发基础》

    20175203 2018-2019 实验四<Android 开发基础> 实验要求 参考Android开发简易教程 完成云班课中的检查点,也可以先完成实验报告,直接提交.注意不能只有截图, ...

  5. nRF51822 蓝牙低功耗和 2.4GHz 专利 SoC

    DESCRIPTION nRF51822 是功能强大.高灵活性的多协议 SoC,非常适用于 Bluetooth® 低功耗和 2.4GHz 超低功耗无线应用. nRF51822 基于配备 256kB f ...

  6. Python 进阶_OOP 面向对象编程_实例属性和方法

    目录 目录 构造器和解构器 构造器 __init__ 真构造器 __new__ 解构器 __del__ 实例方法 Python 中的 抽象方法 实例属性 查看实例属性 实例属性和类属性的区别 访问不可 ...

  7. C#进阶系列——WebApi 路由机制剖析:你准备好了吗? 转载https://www.cnblogs.com/landeanfen/p/5501490.html

    阅读目录 一.MVC和WebApi路由机制比较 1.MVC里面的路由 2.WebApi里面的路由 二.WebApi路由基础 1.默认路由 2.自定义路由 3.路由原理 三.WebApi路由过程 1.根 ...

  8. CSS属性去除图片链接时的虚线框

    CSS 之outline (轮廓)是绘制于元素周围的一条线,位于边框边缘的外围,可起到突出元素的作用.outline 属性是一个简写属性,用于设置元素周围的轮廓线.注释:轮廓线不会占据空间,也不一定是 ...

  9. build temu error about SDL

    1. 安装sdl2 sudo apt-get install libsdl2-dev 2. 将configure文件中与SDL有关的地方改成SDL2 if test -z "$sdl&quo ...

  10. 【转】linux下使用man查看C函数用法

    大家都知道在Unix/Linux中有个man命令,可以查询常用的命令,函数.可是对于我们这样只知道用"man 函数名"来查询的人来说,会遇到很多问题,比如: man read,我想 ...