、

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 部分排序算法的更多相关文章

  1. Java常用排序算法+程序员必须掌握的8大排序算法+二分法查找法

    Java 常用排序算法/程序员必须掌握的 8大排序算法 本文由网络资料整理转载而来,如有问题,欢迎指正! 分类: 1)插入排序(直接插入排序.希尔排序) 2)交换排序(冒泡排序.快速排序) 3)选择排 ...

  2. Java 常用排序算法/程序员必须掌握的 8大排序算法

    Java 常用排序算法/程序员必须掌握的 8大排序算法 分类: 1)插入排序(直接插入排序.希尔排序) 2)交换排序(冒泡排序.快速排序) 3)选择排序(直接选择排序.堆排序) 4)归并排序 5)分配 ...

  3. java:高速排序算法与冒泡排序算法

     Java:高速排序算法与冒泡算法 首先看下,冒泡排序算法与高速排序算法的效率: 例如以下的是main方法: /**   *  * @Description:  * @author:cuiyaon ...

  4. Java八大排序算法

    Java八大排序算法: package sort; import java.util.ArrayList; import java.util.Arrays; import java.util.List ...

  5. Java常用排序算法及性能测试集合

    测试报告: Array length: 20000 bubbleSort : 573 ms bubbleSortAdvanced : 596 ms bubbleSortAdvanced2 : 583 ...

  6. Java各种排序算法

      Java各种排序算法详解 排序大的分类可以分为两种:内排序和外排序.在排序过程中,全部记录存放在内存,则称为内排序,如果排序过程中需要使用外存,则称为外排序.下面讲的排序都是属于内排序. 内排序有 ...

  7. Java各种排序算法详解

    排序大的分类可以分为两种:内排序和外排序.在排序过程中,全部记录存放在内存,则称为内排序,如果排序过程中需要使用外存,则称为外排序.下面讲的排序都是属于内排序. 内排序有可以分为以下几类: (1).插 ...

  8. Java常见排序算法之归并排序

    在学习算法的过程中,我们难免会接触很多和排序相关的算法.总而言之,对于任何编程人员来说,基本的排序算法是必须要掌握的. 从今天开始,我们将要进行基本的排序算法的讲解.Are you ready?Let ...

  9. Java常见排序算法之Shell排序

    在学习算法的过程中,我们难免会接触很多和排序相关的算法.总而言之,对于任何编程人员来说,基本的排序算法是必须要掌握的. 从今天开始,我们将要进行基本的排序算法的讲解.Are you ready?Let ...

  10. Java常见排序算法之折半插入排序

    在学习算法的过程中,我们难免会接触很多和排序相关的算法.总而言之,对于任何编程人员来说,基本的排序算法是必须要掌握的. 从今天开始,我们将要进行基本的排序算法的讲解.Are you ready?Let ...

随机推荐

  1. C++ 类的静态成员详细讲解

    在C++中,静态成员是属于整个类的而不是某个对象,静态成员变量只存储一份供所有对象共用.所以在所有对象中都可以共享它.使用静态成员变量实现多个对象之间的数据共享不会破坏隐藏的原则,保证了安全性还可以节 ...

  2. 用c#开发微信 (17) 微活动 3 投票活动 (文本投票)

    前面介绍了微活动<大转盘> 和 <刮刮卡>,这次介绍下微投票,微投票分二种,一种是文本投票, 一种是图片投票.   下面介绍文本投票的详细步骤: 1. 新建文本投票活动     ...

  3. Dynamic CRM 2013学习笔记(二十七)无代码 复制/克隆方法

    前面介绍过二种复制/克隆方法:<Dynamic CRM 2013学习笔记(十四)复制/克隆记录> 和<Dynamic CRM 2013学习笔记(二十五)JS调用web service ...

  4. WebApi与手机客户端通信安全机制

    最近公司有几个项目需要开发手机客户端,服务器端选用WebApi,那么如何保证手机客户端在请求服务器端时数据不被篡改,如何保证一个http请求的失效机制,下面总结一下我们在项目中针对这两个问题的解决方案 ...

  5. Mac下安装zshell

    Mac 下安装zshell 什么是shell 大多数命令行用户接触最多的是Bash,因为Bash是各个版本操作系统(Linux&Mac)的默认shell. 查看当前使用的shell $ ech ...

  6. sqlserver 链接 ODBC 访问 MySql

    环境:windows 2008 + sqlserver 2008 一 安装 mysql-connector-odbc-5.2.5-winx64.msi 必须安装5.2.5,安装mysql-connec ...

  7. Jenkins2 - 下载与启动

    文章来自:http://www.ciandcd.com 文中的代码来自可以从github下载: https://github.com/ciandcd 本文将引导jenkins初学者安装和配置jenki ...

  8. Lucene

    Lucene 是apache软件基金会一个开放源代码的全文检索引擎工具包,是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎. Lucene的目的是为软件开发人员提供一个简单易 ...

  9. atitit. orm mapping cfg 映射配置(3)-------hbnt one2maney cfg

    atitit. orm mapping cfg  映射配置(3)-------hbnt one2maney  cfg 1. 建立list 1 2. 配置xml 1 3. Hibernate中Set和L ...

  10. Leetcode 203 Remove Linked List Elements 链表

    去掉链表中相应的元素值 /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next ...