- 算法说明
将首元素作为一个Key,从两边往中间遍历,用这个key,分成比它大和比它小的两部分,递归下去
- 源代码
#include <cstdio>
int a[10] = {1, 4, 5, 7, 8, 9, 0, 3, 2, 6}, n = 10;
int partition(int arr[], int p, int q) {
int i = p, j = q, key = arr[p];
while(i < j) {
while(i < j && arr[j] > key) j--;
if(i < j) arr[i++] = arr[j];
while(i < j && arr[i] < key) i++;
if(i < j) arr[j--] = arr[i];
arr[i] = key;
}
return i;
}
void quickSort(int arr[], int p, int q) {
if(p < q) {
int r = partition(arr, p, q);
quickSort(arr, p, r - 1);
quickSort(arr, r + 1, q);
}
}
int main() {
quickSort(a, 0, n - 1);
for(int i = 0; i < n; i++) {
printf("%d ", a[i]);
}
return 0;
}
- 运行结果