算法 第四版 2.3.20

package Cap2_3;

import java.util.Stack;

import Cap2_1.SortTemplate;
import edu.princeton.cs.introcs.StdOut;
import edu.princeton.cs.introcs.StdRandom;

public class Quick extends SortTemplate{


	public static void sort(Comparable[] a){
		StdRandom.shuffle(a);
		int temp=0;
		for(int i=1;i s = new Stack();
		s.add(0);
		s.add(a.length-1);
		while(!s.isEmpty()){
			int hi = s.pop();
			int lo = s.pop();

			if(hi<=lo) continue;
			int j = partition(a, lo, hi);
			if(j-lo>hi-j){
				s.push(lo);
				s.push(j-1);
				s.push(j+1);
				s.push(hi);
			}
			else{
				s.push(j+1);
				s.push(hi);
				s.push(lo);
				s.push(j-1);
			}
		}
	}
	
	private static int partition(Comparable[] a, int lo, int hi){
		int i=lo, j=hi+1;
		Comparable v = a[lo];
		while(true){
			while(less(a[++i], v));  
	        while(less(v, a[--j]));  
			if(j>i) exch(a, i, j);
			else break;
		}
		exch(a, lo, j);
		return j;
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		for(int N=10;N<=100000;N*=10){

			Integer[] a = new Integer[N];
			for(int i=0;i

你可能感兴趣的:(算法 第四版 2.3.20)