#include #include #include void rnd_init(int *array, int size) { int i; srand((unsigned) clock()); for (i = 0; i < size; i++) array[i] = rand(); } void dump(int *array, int size) { int i; for (i = 0; i < size; i++) printf("%2d. <%5d>\n", i, array[i]); } /* void swap(int *a, int *b) { int t; t = *a; *a = *b; *b = t; } */ extern swap(int *a, int *b); void quicksort(int *array, int left, int right) { int li = left, ri = right; int pivot; /* Pivot Selection */ pivot = array[(left + right) / 2]; /* Partitioning */ do { while (li <= right && array[li] < pivot) li++; while (ri >= left && array[ri] > pivot) ri--; if (li <= ri) { if (li != ri) swap(&array[li], &array[ri]); li++; ri--; } } while (li <= ri); /* Recursion */ if (left < ri) quicksort(array, left, ri); if (right > li) quicksort(array, li, right); } int main() { int data[20]; rnd_init(data, 20); printf("Random init:\n"); dump(data, 20); quicksort(data, 0, 19); printf("\nQuick sorted:\n"); dump(data, 20); /* int a = 5, b = 7; swap(&a, &b); */ return 0; }