void quicksort(int a[], int p, int r) { int q; if (p < r) { q = partition(a, p, r); quicksort(a, p, q-1); quicksort(a, q+1, r); } } int partition(int a[], int p, int r) { int i, j, x; x = a[r]; i = p - 1; for (j = p; j < r; j++) { if (a[j] <= x){ i++; swap(&a[j], &a[i]); } } swap(&a[r], &a[++i]); return i; } void swap(int *a, int *b) { int temp; temp = *a; *a = *b; *b = temp; }
测试用例
#include <stdio.h> int main() { int a[] = {5, 1, 7, 12, 9, 6}; quicksort(a, 0, 5); for (i = 0; i < 6; i++) { printf("%d%s", a[i], (i==5)?"\n":" "); } return 0; }
附:另一种partition方法(更加常见)
int partition(int a[], int low, int high) { int pivot = a[low]; while (low < high) { while (low < high && a[high] >= pivot) high--; a[low] = a[high]; while (low < high && a[low] <= pivot) low++; a[high] = a[low]; } a[low] = pivot; return low; }