快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序。它采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod)。快速排序由于排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被采用
该方法的基本思想是:
1.先从数列中取出一个数作为基准数。
2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。
3.再对左右区间重复第二步,直到各区间只有一个数。
package quick_sort;
import org.junit.Before;
import org.junit.Test;
public class QuickSort {
private int[] data;
@Before
public void before() {
data = new int[] {65, 79, 10, 54, 71, 97, 50};
}
@Test
public void test_sort() {
print();
quickSort(data, 0, data.length - 1);
}
public void quickSort(int[] array, int left, int right) {
int ltemp = left;
int rtemp = right;
int border = array[(left + right) / 2];
int temp;
while (ltemp < rtemp) {
while (array[ltemp] < border) {
++ltemp;
}
while (array[rtemp] > border) {
--rtemp;
}
if (ltemp < rtemp) {
temp = array[ltemp];
array[ltemp] = array[rtemp];
array[rtemp] = temp;
ltemp++;
rtemp--;
print();
}
if (ltemp == rtemp) {
ltemp++;
}
if (left < rtemp) {
quickSort(array, left, rtemp);
}
if (right > ltemp) {
quickSort(array, rtemp, right);
}
}
}
protected void print() {
for (int i = 0; i < data.length; i++) {
System.out.print(data[i]);
if (i != data.length - 1) {
System.out.print(", ");
}
}
System.out.println();
}
}
控制台输出了排序的过程:
65, 79, 10, 54, 71, 97, 50
50, 79, 10, 54, 71, 97, 65
10, 79, 50, 54, 71, 97, 65
10, 54, 50, 79, 71, 97, 65
10, 50, 54, 79, 71, 97, 65
10, 50, 54, 71, 79, 97, 65
10, 50, 54, 71, 79, 65, 97
10, 50, 54, 71, 65, 79, 97
10, 50, 54, 65, 71, 79, 97