package com.hb.jzoffer;
import java.util.Random;
import offer.utilities.ArrayUtils;
public class QuickSort {
public QuickSort() {
// TODO Auto-generated constructor stub
}
//快速排序 (两端交替着向中间扫描)
private static int RandomInRange(int min , int max){
if(min < max){
// Random random = new Random();
// int s = random.nextInt(max)%(max - min + 1) + min ;
int s = (int)( Math.random() * (max - min) + min );
return s ;
}else
return -1 ;
}
public int Partition(int[] data , int start , int end){
int length = data.length;
if(data == null || start < 0 || end >= length){
return -1;
}
//随机产生一个index,将此index里面的数值和最后的数值对换
int index = RandomInRange(start , end );
if(index != -1){
ArrayUtils.exchangeElements(data, index, end);
int small = start - 1 ;
for(index = start ; index < end ; ++index){
if(data[index] < data[end]){
++ small;
if(small != index){
ArrayUtils.exchangeElements(data, index, small);
}
}
}
++small;
ArrayUtils.exchangeElements(data, small, end);
return small;
}else{
return -1;
}
}
public void QuickSort(int[] data , int length , int start , int end){
if(start == end ){
return ;
}
int index = Partition(data, start, end);
if(index > start){
QuickSort(data, length, start, index -1) ;
}
if(index < end ){
QuickSort(data, length, index + 1, end);
}
}
public static void main(String[] args) {
QuickSort quickSort = new QuickSort() ;
int[] data = { 3, 6, 1 ,2, 4 , 5};
int length = data.length;
int start = 0 ;
int end = length - 1 ;
quickSort.QuickSort(data, length, start, end);
ArrayUtils.printArray(data);
}
}