快速排序
快速排序时目前广泛应用的一种排序算法。它的实现简单,适用于各种不同的输入数据且在一般应用中比其他排序算法都要快得多。
基本算法
快速排序是一种分治的排序算法。它将一个数组分成两个子数组,将两部分独立地排序。快速排序和递归排序是互补的:归并排序将两个数组分别排序,并将有序的子数组归并以将整个数组排序;而快速排序将数组排序的方式则是当两个子数组都有序时整个数组也就自然有序了。所以区别就是,在第一种情况中,递归调用发生在处理整个数组之前;在第二种情况中,递归调用发生在处理整个数组后。在归并排序中,一个数组被等分成两半;在快速排序中,切分(partition) 的位置取决于数组的内容。
void QuickSort(int arr[], int lo, int hi) {
//快速排序
if (lo < hi) {
int pivot = partition(arr, lo, hi);//划分
QuickSort(arr, lo, pivot - 1);//将左半边排序
QuickSort(arr, pivot + 1, hi);//将右半边排序
}
}
该方法的关键是切分,这个过程使数组满足三个条件:
1.对于某个pivot,arr[pivot] 已经排定;
2.从arr[lo] 到arr[pivot-1] 中所有元素都不大于arr[pivot]