分治法-クイックソート

1335 ワード

package divideConquer;

import java.util.Arrays;
/*
 * 		QuickSort Complexity is nlog(n)
 * 		1.select one of a number as benchmark,then find the benchmark's absolute position
 * 		2.with the benchmark seperate array to two part
 * 		3.use the way like 1
 * 
 * */
public class QuickSort {
	
	public static int partion(int data[],int low,int high)
	{
		int i=low,j=high-1;
		while(i<j)
		{
			while(data[j]>=data[i]&&i<j)
				j--;
			if(i<j) {swap(data,i++,j);}
			
			while(data[i]<=data[j]&&i<j)
				i++;
			if(i<j) {swap(data,i,j--);}
		}
		return i;
	}
	public static void swap(int data[],int i,int j)
	{
		int tmp = data[i];
		data[i] = data[j];
		data[j] = tmp;
	}
	public static void quickSort(int data[],int low,int high)
	{
		if(low+1>=high)
			return ;
		int s = partion(data,low,high);
		quickSort(data,low,s+1);
		quickSort(data,s+1,high);
	}
	public static void main(String args[])
	{
		int data[] = {9,5,1,2,6,3,4,3};
		quickSort(data,0,data.length);
		System.out.println(Arrays.toString(data));
	}
}