快速排序
快速排序是一种分治的排序算法。即将一个数组分为两个独立的子数组,将两个数组分别排序,当两部分子数组分别有序之后,整个数组也就有序了。这也就是说必须要有一个切分元素,将比这个切分元素小的元素放在一个数组中,将比这个切分元素大的元素放在另一个数组中。从而才能实现当两部分分别有序的时候,整个数组也有序。
快速排序的代码:
public class QuickSort {
public void sort(int[] a) {
sort(a, 0, a.length - 1);
}
private void sort(int[] a, int lo, int hi) {
if (lo >= hi) {
return;
}
int temp = partition(a, lo, hi);
sort(a, lo, temp - 1);
sort(a, temp + 1, hi);
}
private int partition(int[] a, int lo, int hi) {
//规定两个数组的指针
int i = lo;
int j = hi + 1;
//设定切分元素
int par = a[lo];
while (true) {
while (par > a[++i]) {
if (i == hi) {
break;
}
}
while (par < a[--j]) {
if (j == lo) {
break;
}
}
if (i >= j) {
break;
}
exch(a, i, j);
}
exch(a, lo, j);
return j;
}
//交换数组中的两个元素的位置
private void exch(int[] a, int lo, int hi) {
int temp = a[lo];
a[lo] = a[hi];
a[hi] = temp;
}
}