Java 部分排序算法
、
import java.io.*;
import java.math.*;
import java.util.*;
public class Algr{
public static int array[] = new int[]{3, 9, 1, 2, 8, 11, 34, 21, 0, 23, 22, 10, 14, 2};
public enum Type{Bubble, Selection, Insert, Shell, Counter, Quick};
public static void main(String[] args){
sort(array, Type.Bubble);
random(array);
sort(array, Type.Selection);
random(array);
sort(array, Type.Insert);
random(array);
sort(array, Type.Shell);
random(array);
sort(array, Type.Counter);
random(array);
sort(array, Type.Quick);
}
public static void random(int[] array){
Random random = new Random();
int n = array.length;
for(int i=0; i< n; i++){
swap(array, i, Math.abs(random.nextInt() % n));
}
}
public static void sort(int[] array, Type type){
if(array == null || array.length ==0){
return;
}
output(type.name(), array);
switch(type){
case Bubble:
bubble(array);
break;
case Selection:
selection(array);
break;
case Insert:
insert(array);
break;
case Shell:
shell(array);
break;
case Counter:
counterSort(array);
break;
case Quick:
quickSort(array);
break;
}
output(type.name(), array);
}
public static void quickSort(int[] array){
int n = array.length;
quickSort(array, 0, n-1);
}
public static void quickSort(int[] array, int left, int right){
if(left >= right){
return;
}
final int start = left;
final int end = right;
int mid = array[left];
while(left < right){
while(array[right] >= mid && left < right){
right--;
}
if(left < right){
array[left] = array[right];
}
while(array[left] < mid && left < right){
left++;
}
if(left < right){
array[right] = array[left];
}
}
array[left] = mid;
quickSort(array, start, left -1);
quickSort(array, left +1, end);
}
// stable N 计数排序,需要额外的空间,并且对待排序的数范围有要求
public static void counterSort(int[] array){
int n = array.length;
int max = getMax(array);
int[] counterArray = new int[max+1];
for(int i=0; i< n ; i++){
counterArray[array[i]]++;
}
int index = 0;
for(int i=0; i<= max; i++){
while(counterArray[i]>0){
array[index] = i;
index++;
counterArray[i]--;
}
}
}
public static int getMax(int[] array){
int max = array[0];
int n = array.length;
for(int i=1; i<n; i++ ){
if(array[i] > max){
max = array[i];
}
}
return max;
}
// instable N^1.5 直接插入排序的变种,利用有序化程度越高,排序越快的特性,逐步缩小增量,将数组有序化
public static void shell(int[] array){
int n = array.length;
int d = n/2;
while(d >= 1){
shellInsertion(array, d);
d = d/2;
}
}
public static void shellInsertion(int[] array, int d){
int n = array.length;
for(int i=d; i< n; i = i+ d ){
int k = i;
int target = array[k];
while(k >= d && target < array[k-d]){
array[k] = array[k-d];
k = k -d;
}
array[k] = target;
}
}
// stable N^2 插入算法和冒泡算法的不同之处在于,它是选定值和前面所有值逐个比较。而不是前后两个比较
public static void insert(int[] array){
int n = array.length;
for(int i=1; i< n; i++){
int k = i;
int target = array[k];
while(k >= 1 && target < array[k-1]){
array[k] = array[k-1];
k--;
}
array[k] = target;
}
}
// instable N^2 选择算法是从无序区中选择一个最小的替换到有序区的指定位置;
public static void selection(int[] array){
int n = array.length;
for(int i=0; i< n; i++){
int k = i;
for(int j= i+1; j< n; j++){
if(array[j] < array[k]){
k = j;
}
}
swap(array, i, k);
}
}
public static void output(String name, int[] array){
System.out.print(name +" ");
for(int i=0; i< array.length; i++){
System.out.print(array[i] +" ");
}
System.out.println();
}
// stable N^2
public static void bubble(int[] array){
int size = array.length;
for(int i=0; i< size; i++){
boolean bSwap = false;
for(int j=size-1; j>0; j--){
if(array[j]< array[j-1]){
swap(array, j, j-1);
bSwap = true;
}
}
if(bSwap == false){
break;
}
}
}
public static void swap(int[] array, int i, int j){
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
Java 部分排序算法的更多相关文章
- Java常用排序算法+程序员必须掌握的8大排序算法+二分法查找法
Java 常用排序算法/程序员必须掌握的 8大排序算法 本文由网络资料整理转载而来,如有问题,欢迎指正! 分类: 1)插入排序(直接插入排序.希尔排序) 2)交换排序(冒泡排序.快速排序) 3)选择排 ...
- Java 常用排序算法/程序员必须掌握的 8大排序算法
Java 常用排序算法/程序员必须掌握的 8大排序算法 分类: 1)插入排序(直接插入排序.希尔排序) 2)交换排序(冒泡排序.快速排序) 3)选择排序(直接选择排序.堆排序) 4)归并排序 5)分配 ...
- java:高速排序算法与冒泡排序算法
Java:高速排序算法与冒泡算法 首先看下,冒泡排序算法与高速排序算法的效率: 例如以下的是main方法: /** * * @Description: * @author:cuiyaon ...
- Java八大排序算法
Java八大排序算法: package sort; import java.util.ArrayList; import java.util.Arrays; import java.util.List ...
- Java常用排序算法及性能测试集合
测试报告: Array length: 20000 bubbleSort : 573 ms bubbleSortAdvanced : 596 ms bubbleSortAdvanced2 : 583 ...
- Java各种排序算法
Java各种排序算法详解 排序大的分类可以分为两种:内排序和外排序.在排序过程中,全部记录存放在内存,则称为内排序,如果排序过程中需要使用外存,则称为外排序.下面讲的排序都是属于内排序. 内排序有 ...
- Java各种排序算法详解
排序大的分类可以分为两种:内排序和外排序.在排序过程中,全部记录存放在内存,则称为内排序,如果排序过程中需要使用外存,则称为外排序.下面讲的排序都是属于内排序. 内排序有可以分为以下几类: (1).插 ...
- Java常见排序算法之归并排序
在学习算法的过程中,我们难免会接触很多和排序相关的算法.总而言之,对于任何编程人员来说,基本的排序算法是必须要掌握的. 从今天开始,我们将要进行基本的排序算法的讲解.Are you ready?Let ...
- Java常见排序算法之Shell排序
在学习算法的过程中,我们难免会接触很多和排序相关的算法.总而言之,对于任何编程人员来说,基本的排序算法是必须要掌握的. 从今天开始,我们将要进行基本的排序算法的讲解.Are you ready?Let ...
- Java常见排序算法之折半插入排序
在学习算法的过程中,我们难免会接触很多和排序相关的算法.总而言之,对于任何编程人员来说,基本的排序算法是必须要掌握的. 从今天开始,我们将要进行基本的排序算法的讲解.Are you ready?Let ...
随机推荐
- (最长公共子序列+推导)Love Calculator (lightOJ 1013)
http://www.lightoj.com/volume_showproblem.php?problem=1013 Yes, you are developing a 'Love calcula ...
- python 之 theano学习:
(1)theano主要支持符号矩阵表达式 (2)theano与numpy中都有broadcasting:numpy中是动态的,而theano需要在这之前就知道是哪维需要被广播.针对不同类型的数据给出如 ...
- mybatis异常
一.Invalid bound statement 1.mapper.xml中namespaces错误(***) 2.方法不存在 3.方法返回值错误 二.Mapped Statements colle ...
- 《Diagnostic use of facial image analysis software in endocrine and genetic disorders: review, current results and future perspectives》学习笔记
<使用面部图像分析软件诊断内分泌和遗传疾病:回顾,当前研究结果以及未来展望> Abstract 库欣综合征(CS)和肢端肥大症普遍是在发病后几年才能被诊断出的内分泌疾病.现在需要新的诊断方 ...
- Kindle 转换器
一款比较好用的Kindle转换器,支持txt, opf, htm, html, epub 到 mobi 的转换,支持拖放操作,支持批量操作.只需要选中多个待转换的文件,拖放到程序窗口即可. 曾经用过一 ...
- 【shell脚本】显示文件的偶数或奇数行
# Dispaly the odd line. awk 'NR%2==1' file
- Linux安装snmp
1.yum安装 yum -y install net-snmp* 2.修改配置文件/etc/snmp/snmpd.conf com2sec notConfigUser default public 默 ...
- asp.net core中Microsoft.AspNet.Session的使用
1.通过nuget/修改project.json引用 2.引用存储session的媒介,如内存.数据库.redis等 "Microsoft.AspNetCore.Session": ...
- iOS开发-【C语言】三目运算符
1.N目运算符 像逻辑非(!).负号(-)这种只连接一个数据的符号,称为“单目运算符”,比如!5.-5.像算术运算符.关系运算符.逻辑运算符这种连接二个数据的负号,称为“双目运算符”,比如6+7.8* ...
- React访问组件元素的子元素(ES5与ES6的对比)
// 创建组件var NewDom = React.createClass({ // 类名一定要大写开头 render: function () { return ( <ol> { Rea ...