package sortAlgorithm;

import java.io.File;

import java.io.IOException;

import java.sql.Time;

import java.util.Random;

* @author sky

* 该类给出各种排序算法

public class sort{

private static Integer[] elem(int n){

int N=n;

Random random=new Random();

Integer elem[]=new Integer[N];

for (int i=0;i<N;i++){

elem[i]=random.nextInt(1000);

return elem;

public static void main (String Args[]) throws InterruptedException{

int n=30000;

Integer elem[]=elem(n);

long start,end;

class sort0 extends Thread{

Integer elem[];

int n;

sort0(Integer elem[],int n){

this.elem=elem;

this.n=n;

public void run(){

System.out.println("线程启动");

straightInsertSort(elem,n);

elem=elem(n);

start=System.currentTimeMillis();

sort0 s1=new sort0(elem,n);

elem=elem(n);

sort0 s2=new sort0(elem,n);

elem=elem(n);

sort0 s3=new sort0(elem,n);

elem=elem(n);

sort0 s4=new sort0(elem,n);

elem=elem(n);

sort0 s5=new sort0(elem,n);

s1.start();

s2.start();

s3.start();

s4.start();

s5.start();

s2.join();

s1.join();

s3.join();

s4.join();

s5.join();

System.out.println("多线程简单插入排序:");

end=System.currentTimeMillis();

System.out.println(end-start);

elem=elem(n);

start=System.currentTimeMillis();

straightInsertSort(elem,n);

end=System.currentTimeMillis();

System.out.println("简单插入排序:");

System.out.println(end-start);

elem=elem(n);

start=System.currentTimeMillis();

shellSort(elem,n);

end=System.currentTimeMillis();

System.out.println("希尔排序:");

System.out.println(end-start);

elem=elem(n);

start=System.currentTimeMillis();

bubbleSort(elem,n);

end=System.currentTimeMillis();

System.out.println("冒泡排序:");

System.out.println(end-start);

elem=elem(n);

start=System.currentTimeMillis();

quickSort(elem,n);

end=System.currentTimeMillis();

System.out.println("快速排序:");

System.out.println(end-start);*/

elem=elem(n);

start=System.currentTimeMillis();

simpleSelectionSort(elem,n);

end=System.currentTimeMillis();

System.out.println("简单选择排序:");

System.out.println(end-start);

elem=elem(n);

start=System.currentTimeMillis();

heapSort(elem,n);

end=System.currentTimeMillis();

System.out.println("堆排序:");

System.out.println(end-start);

elem=elem(n);

start=System.currentTimeMillis();

mergeSort(elem,n);

end=System.currentTimeMillis();

System.out.println("归并排序:");

System.out.println(end-start);

//显示排序结果

public static <T extends Comparable<? super T>> void show(T[] elem,int n){

for (int i=0;i<n;i++){

System.out.print(elem[i]);

System.out.print(' ');

System.out.println();

}

//交换元素

private static <T extends Comparable<? super T>> void swap(T[] elem,int i,int j){

T tmp=elem[i];

elem[i]=elem[j];

elem[j]=tmp;

//直接插入排序法,复杂度为O(n^2)

public static <T extends Comparable<? super T>> void straightInsertSort (T elem[],int n){

for (int i=1;i<n;i++){

T e=elem[i];

int j;

for (j=i-1;j>=0 && e.compareTo(elem[j])<0;j--){

elem[j+1]=elem[j];

}

elem[j+1]=e;

//shell插入排序算法,复杂度为O(n^1.5)

private static <T extends Comparable<? super T>> void  shellInsertHelp(T elem[],int n,int incr){http://www.huiyi8.com/jiaoben/ flash特效

for (int i=incr;i<n;i++){

T e=elem[i];

int j=i-incr;

for (;j>=0 && e.compareTo(elem[j])<0;j=j-incr){

elem[j+incr]=elem[j];

elem[j+incr]=e;

public static <T extends Comparable<? super T>> void shellSort(T elem[],int n ){

for (int incr=n/2;incr>0;incr=incr/2){

shellInsertHelp(elem,n,incr);

//冒泡排序算法,时间复杂度为O(n^2)

public static <T extends Comparable<? super T>> void bubbleSort(T elem[],int n){

for (int i=n-1;i>0;i--){

for (int j=0;j<i;j++){

if (elem[j].compareTo(elem[i])>0){

swap(elem,i,j);

//快速排序算法,时间复杂度为O(n*log(n))

private static <T extends Comparable<? super T>> int partition(T elem[],int low,int high){

while (low<high){

for (;elem[high].compareTo(elem[low])>=0 && low<high;high--);

swap(elem,high,low);

for (;elem[high].compareTo(elem[low])>=0 && low<high;low++);

swap(elem,high,low);

return low;

private static <T extends Comparable<? super T>> void quickSortHelp(T elem[],int low,int high){

if (low<high){

int pivot=partition(elem,low,high);

quickSortHelp(elem,low,pivot-1);

quickSortHelp(elem,pivot+1,high);

public static <T extends Comparable<? super T>> void quickSort(T elem[],int n){

quickSortHelp(elem,0,n-1);

//简单选择排序算法,时间复杂度为O(n^2)

public static <T extends Comparable<? super T>> void simpleSelectionSort(T elem[],int n){

for (int i=0;i<n-1;i++){

int lowIdx=i;

for (int j=i+1;j<n;j++){

if (elem[lowIdx].compareTo(elem[j])>0)

lowIdx=j;

swap(elem,lowIdx,i);

//堆排序,时间复杂度为O(n*log(n))

private static <T extends Comparable<? super T>> void heapAdjust(T elem[],int low,int high){

for (int i=low,lhs=2*i+1 ;lhs<=high;lhs=2*i+1){

if (lhs<high && elem[lhs].compareTo(elem[lhs+1])<0)lhs++;

if (elem[i].compareTo(elem[lhs])<0){

swap(elem,i,lhs);

i=lhs;

}else break;

public static <T extends Comparable<? super T>> void heapSort(T elem[],int n){

//初始化堆

for (int i=(n-2)/2;i>=0;i--){

heapAdjust(elem,i,n-1);

}

swap(elem,0,n-1);

//排序

for (int i=n-2;i>0;--i){

heapAdjust(elem,0,i);

swap(elem,0,i);

//归并排序算法,时间复杂度为O(n*log(n))

private static <T extends Comparable<? super T>> void simpleMerge(T elem[],T tmpElem[],int low ,int mid, int high){

int i=low,j=mid+1,k=low;

for (;i<=mid && j<=high;k++){

if (elem[i].compareTo(elem[j])<=0)

tmpElem[k]=elem[i++];

else

tmpElem[k]=elem[j++];

for (;i<=mid;i++){

tmpElem[k++]=elem[i];

for (;j<=high;j++){

tmpElem[k++]=elem[j];

for (;low<=high;low++){

elem[low]=tmpElem[low];

private static <T extends Comparable<? super T>> void mergeHelp(T elem[],T tmpElem[],int low ,int high){

if (low < high){

int mid=(low+high)/2;

mergeHelp(elem,tmpElem,low,mid);

mergeHelp(elem,tmpElem,mid+1,high);

simpleMerge(elem,tmpElem,low,mid,high);

public static <T extends Comparable<? super T>> void mergeSort(T elem[],int n){

T[] tmpElem=(T[])new Comparable[n];

mergeHelp(elem,tmpElem,0,n-1);

转载于:https://blog.51cto.com/9111046/1440955

java实现各种算法相关推荐

  1. Java 数据结构与算法系列之冒泡排序

    一.前言 相信大部分同学都已经学过数据结构与算法这门课了,并且我们可能都会发现一个现象就是我们所学过的数据结构与算法类的书籍基本都是使用 C 语言来写的,好像没见过使用 Java 写的数据结构与算法. ...

  2. Java数据结构与算法——树(基本概念,很重要)

    声明:码字不易,转载请注明出处,欢迎文章下方讨论交流. 有网友私信我,期待我的下一篇数据结构.非常荣幸文章被认可,也非常感谢你们的监督. 前言:Java数据结构与算法专题会不定时更新,欢迎各位读者监督 ...

  3. Java常见排序算法

    Java常见排序算法 转载于:https://www.cnblogs.com/hfultrastrong/p/7829889.html

  4. Java数据结构与算法——插入排序

    声明:码字不易,转载请注明出处,欢迎文章下方讨论交流. 前言:Java数据结构与算法专题会不定时更新,欢迎各位读者监督.本篇文章介绍排序算法中插入排序算法,包括插入排序的思路,适用场景,性能分析,ja ...

  5. JAVA版连连看算法研究

    JAVA连连看之算法: 连连看连接方式的类型:<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:off ...

  6. java 求交集 算法_Java计算交集,差集,并集的方法示例

    Java计算交集,差集,并集的方法示例 发布时间:2020-10-07 10:37:46 来源:脚本之家 阅读:106 作者:benbenkui 本文实例讲述了Java计算交集,差集,并集的方法.分享 ...

  7. Java数据结构和算法(六)——前缀、中缀、后缀表达式

    前面我们介绍了三种数据结构,第一种数组主要用作数据存储,但是后面的两种栈和队列我们说主要作为程序功能实现的辅助工具,其中在介绍栈时我们知道栈可以用来做单词逆序,匹配关键字符等等,那它还有别的什么功能吗 ...

  8. Java数据结构和算法(一)——简介

    本系列博客我们将学习数据结构和算法,为什么要学习数据结构和算法,这里我举个简单的例子. 编程好比是一辆汽车,而数据结构和算法是汽车内部的变速箱.一个开车的人不懂变速箱的原理也是能开车的,同理一个不懂数 ...

  9. java基础----Base64算法的使用

    Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,可用于在HTTP环境下传递较长的标识信息.详细的Base64信息,可以参见维基百科:https://en.wikipedia.org ...

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

    一.概述 本节由小千给大家分享Java常见排序算法之插入排序,之前我们说过排序是算法中的一部分.所以我们学习排序也是算法的入门,为了能让大家感受到排序是算法的一部分,我举个例子证明一下:比如麻将游戏, ...

最新文章

  1. 极限挑战—C#100万条数据导入SQL SERVER数据库仅用4秒 (附源码)
  2. CentOS7 续续
  3. 为什么说Java是2021年最值得学的技术?
  4. linux 使用 FIO 测试磁盘的iops
  5. java jmx 配置_Java JMX远程调优一点就通
  6. 使用 Async 和 Await 的异步编程
  7. word-break:break-all和word-wrap:break-word的区别
  8. python爬虫从入门到放弃(六)之 BeautifulSoup库的使用
  9. VS-001-概述-003-系统架构及业务流程--004-常见问题定位思路
  10. leetcode题解131-分割回文串
  11. Html前端基础(select下拉选标签、table表格标签)
  12. kindEditor文本编辑器
  13. NodeJs之数据库异常处理
  14. 嵌入式linux ntpd命令,嵌入式Linux网络编程之:实验内容——NTP协议实现
  15. 注释驱动的 Spring cache 缓存介绍
  16. android 读取 IMEI 和 MEID 的处理
  17. LRU算法(有彩蛋)
  18. 基于SNMP数据采集模块的设计和实现2
  19. php结合HTML表格输出乘法表
  20. 基于用户体验的手机产品交互设计原则

热门文章

  1. 一次完整较为渗透过程
  2. Ext JS 5 beta版发布
  3. 正则表达式限制文本框只能输入数字
  4. 计算机应用基础126题,2015-2016年全国计算机应用基础总复习.
  5. I.MX6ULL芯片介绍 —— 迅为
  6. 重新加一个window_Activity、View、Window关系,进程间通信,责任链模式,Https,数据存储...
  7. git的smart Checkout跟force checkout的区别
  8. 学习笔记~~~~LinkedHashMap
  9. linux db2 ssl,IBM DB2 Content Manager V83与手工配置SSL
  10. QT 发布程序到开发板