算法介绍
一趟快速排序的算法是:
1)设置两个变量i、j,排序开始的时候:i=0,j=N-1;
2)以第一个数组元素作为关键数据,赋值给key,即key=A[0];
3)从j开始向前搜索,即由后开始向前搜索(j--),找到第一个小于key的值A[j];
4)从i开始向后搜索,即由前开始向后搜索(i++),找到第一个大于key的A[i],将A[i]和A[j]互换;
5)重复第3、4步,直到i==j;
快速排序
public class Test {
public static void main(String[] args) {
int[] a = new int[] { 6, 1, 2, 7, 9, 3, 4, 5, 10, 8 };
Test.sort(a);
}
public static void sort(int[] a) {
Inner inner = new Inner();
inner.a = a;
inner.quicksort(0, a.length - 1);
}
private static class Inner {
int[] a;
// 递归形式
public void quicksort(int left, int right) {
// 递归出口
if (left >= right) {
return;
}
// 建立基准数
int temp = a[left];
// 初始化
int i = left;
int j = right;
// 交换数据的临时缓存
int t = 0;
while (i < j) {
while (a[j] >= temp && i < j) {
j--;
}
while (a[i] <= temp && i < j) {
i++;
}
if (i < j) {
t = a[j];
a[j] = a[i];
a[i] = t;
out(a);
}
}
a[left] = a[i];
a[i] = temp;
out(a);
quicksort(left, i - 1);
quicksort(i + 1, right);
}
}
public static void out(int[] a) {
for (int i = 0; i < a.length; i++) {
System.out.print(a[i] + " ");
}
System.out.println();
}
}
代码执行过程
图片 来源于 啊哈!算法.