快速排序是由C.A.R.Hoare(1962)开发出来的,该算法在数组中选择一个称为主元(pivot)的元素,然后将数组分为两个部分,使得第一部分的元素都小于或者等于主元,而第二部分的所有元素都大于主元。对第一部分递归应用快速排序算法,然后是第二部分。以此类推,一直到不能再划分为止。
代码如下:
第一步,划分:
int partition(int list[], int first, int last){
int pivot = list[first];
int low = first + 1;
int high = last;
while (high > low){
//从左边开始往右找比主元(pivot)大的数,找到后退出循环。
while (low <= high&&list[low] <= pivot)
low++;
//从右边开始往左找比主元小的数,找到后退出循环。
while (low <= high&&list[high] > pivot)
high--;
//将左边的比主元大的数与右边的比主元小的数进行交换。
if (high > low){
int temp = list[low];
list[low] = list[high];
list[high] = temp;
}
}
while (high > first&&list[high] >= pivot)
high--;
//将主元放置。
if (pivot > list[high]){
list[first] = list[high];
list[high] = pivot;
return high;
}
else{
return first;
}
}
第二步,递归使用快速排序:
void quickSort(int list[], int first, int last){
if (last > first){
int pivotIndex = partition(list, first, last);
quickSort(list, first, pivotIndex-1);
quickSort(list, pivotIndex + 1, last);
}
}