最近在复习算法,复习到QuickSort。QuickSort原理很简单。就是将一段序列分成两段,两段的一段大于一个中间值,一段小于那个中间值。然后再用递归的方法不断调用这个分段方法。完成排序。
参考了:Robert Sedgewick 的《算法(Algorithm )》
public class QuickSort {
public static void main(String[] args) {
int[] arr = {13,4,5,6,8,9,5,8,96,17,23};
// attention: need shuffle array at first!
sort(arr);
String output = "";
for (int i:arr) {
output += i + ",";
}
System.out.println(output);
}
public static void sort(int[] nums) {
sort(nums, 0, nums.length - 1);
}
private static void sort(int[] nums, int lo, int hi) {
if (hi <= lo) return;
int j = patition(nums, lo, hi);
sort(nums, j + 1, hi);
sort(nums, lo, j - 1);
}
private static int patition(int[] a, int lo, int hi) {
int i = lo, j = hi + 1;
int v = a[lo];
while (true) {
while (a[++i] < v) if (i == hi) break;
while (a[--j] > v) if (j == lo) break;
if (i >= j) break;
swap(a, i, j);
}
swap(a, lo, j);
return j;
}
private static void swap(int[] nums, int a, int b) {
int temp = nums[a];
nums[a] = nums[b];
nums[b] = temp;
}
}