Java排序算法 [选择、冒泡、快排]
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排序算法 [选择、冒泡、快排]的更多相关文章
- Java写 插入 选择 冒泡 快排
/** * Created by wushuang on 2014/11/19. */ public class SortTest { @Test public void mainTest() { i ...
- Java排序算法之冒泡、选择、插入、快速
JavaSort Java经典排序算法代码 2018-1-26更新:冒泡排序,选择排序,插入排序,快速排序 1. 冒泡排序 特点:效率低,实现简单 思想(从小到大排): 第1个数和第2个数比较,如果第 ...
- Java排序算法——选择排序
import java.util.Arrays; //================================================= // File Name : Select_S ...
- java排序算法-选择排序
public class SelectionSort { private static void selectSortTest() { int[] sortArray = { 5, 2, 4, 1, ...
- C++学习(三十八)(C语言部分)之 排序(冒泡 选择 插入 快排)
算法是解决一类问题的方法排序算法 根据元素大小关系排序 从小到大 从大到小冒泡 选择 插入 快排希尔排序 归并排序 堆排序 冒泡排序 从头到尾比较 每一轮将最大的数沉底 或者最小数字上浮 选择排序 1 ...
- Shell数组以及排序算法(冒泡、直接选择、反转)
Shell数组以及排序算法(冒泡.直接选择.反转) 目录 Shell数组以及排序算法(冒泡.直接选择.反转) 一.数组概述 1. 数组的定义 2. 下标的定义 3. 数组的特点 4. 数组定义的方法 ...
- java排序算法(二):直接选择排序
java排序算法(二) 直接选择排序 直接选择排序排序的基本操作就是每一趟从待排序的数据元素中选出最小的(或最大的)一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完,它需要经过n- ...
- javascript数据结构与算法--基本排序算法(冒泡、选择、排序)及效率比较
javascript数据结构与算法--基本排序算法(冒泡.选择.排序)及效率比较 一.数组测试平台. javascript数据结构与算法--基本排序(封装基本数组的操作),封装常规数组操作的函数,比如 ...
- Java排序算法之直接选择排序
Java排序算法之直接选择排序 基本过程:假设一序列为R[0]~R[n-1],第一次用R[0]和R[1]~R[n-1]相比较,若小于R[0],则交换至R[0]位置上.第二次从R[1]~R[n-1]中选 ...
随机推荐
- 【leetcode】659. Split Array into Consecutive Subsequences
题目如下: 解题思路:本题可以维护三个字典,dic_1保存没有组成序列的单元素,dic_2保存组成了包含两个元素的序列中的较大的元素,dic_3保存组成了包括三个或者三个以上元素的序列中的最大值.因为 ...
- Java自定义注解学习
1.定义一个枚举类,后面自定义注解时使用 package cn.tx.annotation.enums; /** * 定义枚举类型 * @author Administrator * */ publi ...
- springMVC带参数请求重定向
SpirngMVC返回逻辑视图名 可以分下面几种情况: 1. servlet进行请求转发,返回到jsp页面,如 return "index.jsp" ; 2. servlet 返 ...
- delphi 异形窗体可半透明
unit xDrawForm; interface uses Windows, Messages, SysUtils, Classes, Controls, Forms, Menus, Graphic ...
- (转)堆和栈的概念和区别 HeapOutOfMemory和StackOverflow解释
转:https://blog.csdn.net/pt666/article/details/70876410 https://blog.csdn.net/guohan_solft/article/de ...
- ACM中java的使用 (转)
ACM中java的使用 这里指的java速成,只限于java语法,包括输入输出,运算处理,字符串和高精度的处理,进制之间的转换等,能解决OJ上的一些高精度题目. 1. 输入: 格式为:Scanner ...
- jmeter添加自定义扩展函数之String---base64加密
1,打开eclipse,新建maven工程,在pom中引用jmeter核心jar包,具体请看---https://www.cnblogs.com/guanyf/p/10863033.html---,这 ...
- xml解析用正则解决没有标签的文本的解析不出异常
如 <q>sasas<w>eqwe</w>ddas</q> package com.people.xmlToSql; import java.io.F ...
- ubuntu下MySQL的安装及远程连接配置(转)
1.命令窗口中输入sudo apt-get install mysql-server mysql-client 即可(配置文件位置:/etc/mysql/my.cnf 启动文件位置:/etc/init ...
- ArcGIS 面要素缝隙孔洞检查代码 C# GP
public class PolygonGapChecker : CheckProgressMessageSender, IChecker, ICheckProgressChangeEvent { p ...