快速排序java递归实现
算法思想见博客http://blog.csdn.net/morewindows/article/details/6684558
代码实现如下
import java.util.Arrays;
import java.util.Stack;
public class QuickSort {
public static void main(String[] args) {
int[] array = { 49, 1, 200, 5, 7, 2, 6, 9, 44, 10, 25, 4, 99, 101 };
quicksort(array, 0, array.length - 1);
System.out.println(Arrays.toString(array));
}
//递归
public static void quickSort(int[] arr, int start, int end) {
if (end <= start)
return;
int i = start;
int j = end;
int key = arr[i];
while (i < j) {
while (arr[j] >= key && j > i)
j--;
arr[i] = arr[j];
while (arr[i] <= key && i < j)
i++;
arr[j] = arr[i];
}
arr[i] = key;
quickSort(arr, start, i - 1);
quickSort(arr, i + 1, end);
}
//非递归
static int partion(int[] arr, int start, int end) {
int i = start;
int j = end;
int key = arr[i];
while (i < j) {
while (arr[j] >= key && i < j)
j--;
arr[i] = arr[j];
while (arr[i] <= key && i < j)
i++;
arr[j] = arr[i];
}
arr[i] = key;//此时i==j
return i;
}
static void quicksort(int[] arr, int start, int end) {
if (end <= start)
return;
Stack<Integer> stack = new Stack<Integer>();
stack.push(start);
stack.push(end);
while (!stack.isEmpty()) {
int j = stack.pop();
int i = stack.pop();
int k = partion(arr, i, j);
if (i < k) {
stack.push(i);
stack.push(k);
}
if (k+1 < j) {//此处必须k+1,否则无限循环
stack.push(k+1);
stack.push(j);
}
}
}
}