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]中选 ...
随机推荐
- centos7安装完成之后必要的配置
一配置yum源 curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo wget ...
- GameObject.Find
代码演示: using System.Collections;using System.Collections.Generic;using UnityEngine; public class Game ...
- Yii2.0 for update 行级锁
当我们遇到存在高并发并且对于数据的准确性有要求的场景,需要了解和使用for update 需要注意的点: 1.InnoDB默认是行级别的锁,当有明确指定的主键时候,是行级锁.否则是表级别 2.for ...
- Configuring IPMI under Linux using ipmitool
http://www.thomas-krenn.com/en/wiki/Configuring_IPMI_under_Linux_using_ipmitool Configuring IPMI und ...
- Mac-如何安装apk到android手机
将电脑上的apk安装到手机,Windows系统可以使用usb连接Android手机,然后打开编辑手机中的文件,直接粘贴apk到手机上安装apk.对于Mac来说就没有那么简单啦.那么Mac如何将apk安 ...
- CET-6 分频周计划生词筛选(Week 2)
点我阅读 Week 2 2016.09.04/05 p58 ongoing / forward p59 prosperity p60 rear p61 rival + segregation + se ...
- FWT公式一览
总表 真值表 对应运算 FWT IFWT A=B=0 A≠B A=B=1 左项 右项 左项 右项 0 0 1 & L+R R L-R R 0 1 0 ^ L+R L-R (L+R)/2 (L- ...
- Python中的内置函数和匿名函数
1. 内置函数 print用法 def print(self, *args, sep=' ', end='\n', file=None): # known special case of print ...
- Visual Studio Code 键盘参考表
2019年4月6日,对照中英翻译. 一般 Ctrl+Shift+P, F1 显示命令调色板 Ctrl+P 快速打开,转到文件… Ctrl+Shift+N 新建窗口/实例 Ctrl+Shift+W ...
- 公司redis
一: redis cluster介绍篇 1:redis cluster的现状 目前redis支持的cluster特性(已亲测): 1):节点自动发现 2):slave->master 选举,集群 ...