package chap07_Quick_Sort;
import static org.junit.Assert.*;
import java.util.Arrays;
import org.junit.Test;
public class SortAlgorithms {
/**
* 快速排序算法
*
* @param n
*/
static void quickSort(int[] n) {
int from = 0;
int to = n.length;
// quickSort(n, from, to);
quickSort1(n, from, to);
}
/**
* 快速排序的递归实现,将n从start到end之间的数字排序(不包括end)
*
* @param n
* @param start
* @param end
*/
static protected void quickSort(int[] n, int start, int end) {
if (start < end - 1) {
int a;
a = partition(n, start, end);
quickSort(n, start, a);
quickSort(n, a, end);
}
}
/**
* 快速排序的迭代实现
*
* @param n
* @param start
* @param end
*/
static protected void quickSort1(int[] n, int start, int end) {
int a = partition(n, start, end);
int b = a;
while (start < a - 1) {
a = partition(n, start, a);
}
while (b < end - 1) {
b = partition(n, b, end);
}
}
/**
* 分割(快速排序中对数组的分割)
*
* @param n
* @param start
* @param end
* @return
*/
protected static int partition(int[] n, int start, int end) {
int p = end - 1;
int s = start;// s位于大于a[p]和小于a[p]之间的位置
int tmp;
for (int i = start; i < end; i++) {
if (n[i] < n[p]) {
tmp = n[i];
n[i] = n[s];
n[s] = tmp;
s++;
}
}
{
tmp = n[s];
n[s] = n[p];
n[p] = tmp;
}
return s;
}
@Test
public void testName() throws Exception {
int[] a = { 13, 19, 9, 5, 12, 8, 7, 4, 21, 2, 6, 11 };
// System.out.println(Arrays.toString(a));
// partition(a, 0, 12);
quickSort(a);
System.out.println(Arrays.toString(a));
}
}