java多线程归并排序_Java快速排序,堆排序,归并排序,希尔排序等排序算法的实现详解...

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

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 > void show(T[] elem,int n){

for (int i=0;i

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

System.out.print(' ');

}

System.out.println();

}

//交换元素

private static > void swap(T[] elem,int i,int j){

T tmp=elem[i];

elem[i]=elem[j];

elem[j]=tmp;

}

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

public static > void straightInsertSort (T elem[],int n){

for (int i=1;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 > void shellInsertHelp(T elem[],int n,int incr){

for (int i=incr;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 > 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 > void bubbleSort(T elem[],int n){

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

for (int j=0;j

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

swap(elem,i,j);

}

}

}

}

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

private static > int partition(T elem[],int low,int high){

while (low

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

swap(elem,high,low);

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

swap(elem,high,low);

}

return low;

}

private static > void quickSortHelp(T elem[],int low,int high){

if (low

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

quickSortHelp(elem,low,pivot-1);

quickSortHelp(elem,pivot+1,high);

}

}

public static > void quickSort(T elem[],int n){

quickSortHelp(elem,0,n-1);

}

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

public static > void simpleSelectionSort(T elem[],int n){

for (int i=0;i

int lowIdx=i;

for (int j=i+1;j

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

lowIdx=j;

}

swap(elem,lowIdx,i);

}

}

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

private static > void heapAdjust(T elem[],int low,int high){

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

if (lhs

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

swap(elem,i,lhs);

i=lhs;

}else break;

}

}

public static > 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 > 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 > 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 > void mergeSort(T elem[],int n){

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

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

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值