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】331. Verify Preorder Serialization of a Binary Tree
题目如下: One way to serialize a binary tree is to use pre-order traversal. When we encounter a non-null ...
- 计算机网络体系之OSI模型
1.计算机网络体系结构 计算机网络体系结构指的是计算机网络层次模型和各层协议的集合.计算机网络按照高度结构化设计方法采用功能分层原理来实现. 2.OSI模型 网络协议是计算机网络必不可少的,一个完整的 ...
- ES6中模块加载出现的问题
1.如何在浏览器中import模块 在使用模块加载时不同浏览器有不同的行为 使用 import 加载模块时,需要把script标签的type属性改为module.此时Firefox浏览器支持impor ...
- python 操作yaml文件
yaml 5.1版后弃用了yaml.load(file)这个用法,因为觉得很不安全,5.1版后就修改了需要指定Loader,通过默认加载器(FullLoader)禁止执行任意函数yaml 5.1之 ...
- 22 October in 614
Contest A. defile struct 自定义排序.按照题意抽象成模型模拟就可以了. 自定义排序核心代码: struct node { int x, id; } d[1000003]; bo ...
- GET和POST的数据传递到底有何区别?
1. GET和POST与数据如何传递没有关系 GET和POST是由HTTP协议定义的.在HTTP协议中,Method和Data(URL, Body, Header)是正交的两个概念,也就是说,使用哪个 ...
- CreateProcessEx创建进程
NTSYSCALLAPI NTSTATUS NTAPI NtCreateProcess( OUT PHANDLE ProcessHandle, IN ACCESS_MASK DesiredAccess ...
- Modify PDF operators.
1 Depart Process: 2 1. Grep xref and trailer binary position in file. 3 2. Dump xref table and trail ...
- Oralce分页
SELECT *FROM ( SELECT TMP_PAGE.*, ROWNUM ROW_ID FROM ( SELECT A . ID AS "id", A .bill_noti ...
- Python快速设置Excel表格边框
import xlwings as xw #打开存好的excel app = xw.App() #设置应用 wb = xw.Book("E:/Data/小蜜蜂超市销售报表.xlsx" ...