/* */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> int partition(int *a, int start, int end, int key) { int i = start, j = end; while (1) { while (a[j] >= key) { j--; if (j == start) { return start; } } while (a[i] <= key && i <= end) { i++; } if (i < j) { int tmp; tmp = a[i]; a[i] = a[j]; a[j] = tmp; } else return j; } } void quick_sort(int *a, int start, int end) { if (start < end) { int q = partition(a, start, end, a[start]); int tmp; tmp = a[start]; a[start] = a[q]; a[q] = tmp; quick_sort(a, start, q - 1); quick_sort(a, q + 1, end); } } int main() { int a[] = {9, 8, 10, 2, 1, 19, 10, 20}; int aa[] = {19,19,19, 19}; quick_sort(a, 0, sizeof(a) / sizeof(int) - 1); for (int i = 0; i < sizeof(a) / sizeof(int); i++) { printf("%d ", a[i]); } printf("\n"); }