基础快排:
int __partition(int arr[], int l, int r) {
int v = arr[l];
int j = l ;
for (int i = l + 1; i <= r; i++) {
if (arr[i] < v){
swap(arr[i], arr[j + 1]);
j++;
}
}
swap(arr[l], arr[j]);
return j;
}
void __quickSort(int arr[], int l, int r) {
if (l >= r)
return;
int p = __partition(arr, l, r);
__quickSort(arr, l, p - 1);
__quickSort(arr, p + 1, r);
}
void quickSort(int arr[], int n) {
__quickSort(arr, 0, n - 1);
}
优化快排:
基础快排的缺点:
- 如果数组为有序数组,时间复杂度退化到O(n^2)
- 如果数组中存在大量重复元素,时间复杂度也会退化到O(n^2),如图