package com.kingdz.algorithm.time201702;
import java.util.Arrays;
/**
* 快速排序
*
* @author kingdz
*
*/
public class Algo15 {
public static void main(String[] args) {
int count = 10;
int[] number = new int[count];
number = Algo13.fillArray(count, false);
System.out.println(Arrays.toString(number));
number = quicksort(number, 0, number.length - 1);
}
private static int[] quicksort(int[] number, int start, int end) {
if (start < end) {
int index = diversion(number, start, end);
quicksort(number, start, index - 1);
quicksort(number, index + 1, end);
}
return number;
}
/**
* 分割函数
*
* @param arr
* 数组
* @param start
* 起始位置
* @param end
* 结束位置
* @return
*/
private static int diversion(int[] arr, int start, int end) {
int base = arr[start];
int left = start;
int right = end;
while (left < right) {
while (left < right && arr[right] > base) {
right--;
}
if (left < right) {
// 此次交换后所有base右边都比base大
Algo13.swap(arr, left, right);
}
while (left < right && arr[left] < base) {
left++;
}
if (left < right) {
// 此次交换后所有base左边都比base小
Algo13.swap(arr, left, right);
}
}
System.out.println(Arrays.toString(arr));
return left;
}
}