/**
* @Description: 快速排序
* @author huangzhongjie
* @mail [email protected]
* @Company Digital China
* @date 2017-7-15
*/
public class QuickSort {
public static void main(String[] args) {
int[] arrTest = { 7, 4, 9, 6, 10, 3 };
qsort(arrTest, 0, arrTest.length - 1);
for (int x : arrTest) {
System.out.println(x);
}
}
public static void qsort(int[] arr, int begin, int end) {
// 记录把小于arr[begin]的元素放于arr[begin]左边,大于等于arr[begin]的元素放于arr[begin]右边后的元素顺序
int[] temp = new int[end - begin + 1];
// 表示只有一个元素需要排序,退出递归
if (end == begin) {
return;
}
int iBig = end - begin;
int iSmall = 0;
for (int i = begin + 1; i <= end; i++) {
// 大于等于arr[begin]的元素放于arr[begin]右边
if (arr[i] >= arr[begin]) {
temp[iBig--] = arr[i];
} else {
// 小于arr[begin]的元素放于arr[begin]左边
temp[iSmall++] = arr[i];
}
}
// arr[begin]的位置
temp[iSmall] = arr[begin];
// 根据temp数组记录的元素顺序调整arr数组元素的顺序
for (int i = begin; i <= end; i++) {
arr[i] = temp[i - begin];
}
// arr[begin]左边还有元素,对左边进行快速排序
if (iSmall > 0) {
qsort(arr, begin, iSmall + begin - 1);
}
// arr[begin]右边还有元素,对右边进行快速排序
if (iBig < end - begin) {
qsort(arr, iSmall + begin + 1, end);
}
}
}