quicksort

import java.util.*;
import javax.swing.*;

class Testquicksort{
		
		static int div(int a[],int b,int e){
				int i,j,k,m;
				m=a[b];
				while(true){
					for(i=b+1;i<=e && a[i]<=m;i++){}
					for(j=e;a[j]>m;j--){}
					if(i>=j)break;
					k=a[i];
					a[i]=a[j];
					a[j]=k;
				}
				k=a[j];
				a[j]=a[b];
				a[b]=k;
				
				return j;//因为j<i所以j不可能为e  最大只能为e-1,如{2,1,1,1,1,1,1,3}
				//if {2,3,3,3,3,3,3}此时j=0;  再次quicksort时会因为if(b<e)  0<-1 跳出递归
			}
		
		static void quicksort(int a[],int b,int e){
				if(b<e){
						int m=div(a,b,e);
						quicksort(a,b,m-1);
						quicksort(a,m+1,e);
					}
			}
		
		
		public static void main(String[] args){
			int num=10000;
			int[] a=new int[num];
			int[] b=new int[num];
			Random r=new Random();
			//给a数组 b数组同样的赋值 并打印
			for(int i=0;i<a.length;i++){
					a[i]=r.nextInt(num)+1;
					b[i]=a[i];
					System.out.print(a[i]+" ");
				}
				System.out.println();
				for(int i=0;i<b.length;i++){
					System.out.print(b[i]+" ");
				}
				System.out.println();
				
			//a数组进行quicksort	
			long atime=System.currentTimeMillis();
			quicksort(a,0,num-1);
			atime=System.currentTimeMillis()-atime;
				
			//打印排序后的a数组
			System.out.println();
			for(int i=0;i<a.length;i++){
					System.out.print(a[i]+" ");
				}
				
			
			
			//b数组进行selectsort
			long btime=System.currentTimeMillis();
			for(int z=0;z<b.length;z++){
					int min=100000000,mi=0,t;
					for(int y=z;y<b.length;y++){
							if(b[y]<min){
									min=b[y];
									mi=y;
								}
						}
						t=b[z];
						b[z]=b[mi];
						b[mi]=t;
				}
				btime=System.currentTimeMillis()-btime;		
			
			//打印排序后的b数组
				System.out.println();
				System.out.println();
				
				for(int i=0;i<b.length;i++){
					System.out.print(b[i]+" ");
				}
				
				
				//输出时间
				System.out.println("\nquicksort: "+atime+" ms");
				System.out.println("\nselectsort: "+btime+" ms");
				
				System.out.println("\n对"+num+"位数进行排序时2种算法时间差为: "+(btime-atime)+" ms");
		}
		
	}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值