`
EmmaZhao
  • 浏览: 32535 次
  • 性别: Icon_minigender_2
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

排序算法(二)

 
阅读更多
package sort;

import java.util.Random;

public class QuickSort {
	private int[] input;
	private int partition(int[] input,int p,int r){
		int x = input[r];
		
		int i = p -1;
		
		for(int j = p; j< r;j++){
			if(input[j] <= x){
				i++;
				
				int temp = input[i];
				input[i] = input[j];
				input[j] = temp;
			}
					
		}
		int temp = input[i+1];
		input[i+1] = input[r];
		input[r] = temp;
		
		return i + 1;
	}
	
	public void out(){
		for(int i = 0;i< input.length; i++){
			System.out.print(input[i] + " ");
		}
		System.out.println();
	}
	public QuickSort(int[] input){
		this.input = input;
	}
	public void quickSort(){
		sort(input,0,input.length -1 );
	}
	
	private void sort(int[] input,int p,int r){
		if(p<r){
			int q = partition(input, p, r);
			
			sort(input, p, q-1);
			sort(input, q+1, r);
		}
	}

	public int randomPartition(int[] input,int p,int r){
		int i = random(p, r);
	
		int temp = input[i];
		input[i] = input[r];
		input[r] = temp;
		
		return partition(input, p, r);
	}
	
	public void randomQuickSort(){
		randomQuickSort(input, 0, input.length -1);
	}
	private void randomQuickSort(int[] input,int p,int r){
		if(p < r){
			int q = randomPartition(input, p, r);
			
			randomQuickSort(input, p, q-1);
			randomQuickSort(input, q+1, r);
		}
	}

	public static int random(int p,int r){
		return new Random().nextInt(r + 1 -p) + p;
	}
	private int hoarePartition(int input[],int p,int r){
		int x = input[p];
		int i = p;
		int j = r;
		
		while(true){
			while(input[j] > x){
				j-- ;
			}
			while(input[i] < x){
				i++ ;
			}
			if(i < j){
				int temp = input[i];
				input[i] = input[j];
				input[j] = temp;
			}
			else{
				return j;
			}
		}
	}
	
	private void hoareSort(int input[],int p,int r){
		if(p < r){
			int q = hoarePartition(input, p, r);
			
			hoareSort(input, p, q -1);
			hoareSort(input, q +1, r);
		}
	}
	
	public void hoareSort(){
		hoareSort(input, 0, input.length -1);
	}
	
	public static void main(String[] args){
		int[] input = {2,8,7,1,3,5,6,4};
	
		for(int j = 0; j < input.length;j++){
			System.out.print(input[j] + " ");
		}
		System.out.println();
		
		QuickSort sort = new QuickSort(input);
//		sort.quickSort();
//		sort.randomQuickSort();
		sort.hoareSort();
		sort.out();
	
	}
}

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics