快速排序算法

package com.arr.aa;

public class MyTestQuickSort {

	public static void main(String[] args) {
		int[] arr = {12,5,12,48,8,6,7,8,-2,-5,-1,0};
		quick(arr, 0, arr.length-1);
		for(int i=0; i < arr.length; i++){
			System.out.print(arr[i]+ " ");
		}
	}
	
	//实现排序算法
	public static void quick(int[] arr,int start,int end){
		if(arr == null||(end - start+1)<2){
			return;
		}
		
		int pos = position(arr, start, end);
		if(pos == start){
			quick(arr, pos+1, end);
		}else if(pos == end){
			quick(arr, start, pos-1);
		}else{
			quick(arr, start, pos-1);
			quick(arr, pos+1, end);
		}
	}
	
	public static int position(int[] arr,int start,int end){
		//为了简单起见,定义一个基准元素(最后一个)
		int value = arr[end];
		int index = start - 1;
		
		for(int i = start ; i < end; i++){
			if(arr[i] < value){
				index ++;
				if(index != i){
					//交换元素index和i
					swap(arr,index,i);
				}
			}
		}
		//循环完成之后
		if((index+1)!=end){
			//交换index+1和end
			swap(arr,index+1,end);
		}
		
		return index+1;
	}

	private static void swap(int[] arr, int index, int i) {
		// TODO Auto-generated method stub
		int temp = arr[index];
		arr[index] = arr[i];
		arr[i] = temp;
	}
}


你可能感兴趣的:(快速排序算法)