#include <stdio.h>
#define N 10
void quicksort(int a[], int low, int high);
int split(int a[], int low, int high);
int main(void)
{
int a[N], i;
printf("Enter %d numbers to be sorted: ", N
); for (i = 0; i < N; i++)
quicksort(a, 0, N - 1);
for (i = 0; i < N; i++)
return 0;
}
void quicksort(int a[], int low, int high)
{
int middle;
if (low >= high) return;
middle = split(a, low, high);
quicksort(a, low, middle - 1);
quicksort(a, middle + 1, high);
}
int split(int a[], int low, int high)
{
int part_element = a[low];
for (;;) {
while (low < high && part_element <= a[high])
high--;
if (low >= high) break;
a[low++] = a[high];
while (low < high && a[low] <= part_element)
low++;
if (low >= high) break;
a[high--] = a[low];
}
a[high] = part_element;
return high;
}
CiNpbmNsdWRlIDxzdGRpby5oPgoKI2RlZmluZSBOIDEwCgp2b2lkIHF1aWNrc29ydChpbnQgYVtdLCBpbnQgbG93LCBpbnQgaGlnaCk7CmludCBzcGxpdChpbnQgYVtdLCBpbnQgbG93LCBpbnQgaGlnaCk7CgppbnQgbWFpbih2b2lkKQp7CiAgaW50IGFbTl0sIGk7CgogIHByaW50ZigiRW50ZXIgJWQgbnVtYmVycyB0byBiZSBzb3J0ZWQ6ICIsIE4pOwogIGZvciAoaSA9IDA7IGkgPCBOOyBpKyspCiAgICBzY2FuZigiJWQiLCAmYVtpXSk7CgogIHF1aWNrc29ydChhLCAwLCBOIC0gMSk7CgogIHByaW50ZigiSW4gc29ydGVkIG9yZGVyOiAiKTsKICBmb3IgKGkgPSAwOyBpIDwgTjsgaSsrKQogICAgcHJpbnRmKCIlZCAiLCBhW2ldKTsKICBwcmludGYoIlxuIik7CgogIHJldHVybiAwOwp9Cgp2b2lkIHF1aWNrc29ydChpbnQgYVtdLCBpbnQgbG93LCBpbnQgaGlnaCkKewogIGludCBtaWRkbGU7CgogIGlmIChsb3cgPj0gaGlnaCkgcmV0dXJuOwogIG1pZGRsZSA9IHNwbGl0KGEsIGxvdywgaGlnaCk7CiAgcXVpY2tzb3J0KGEsIGxvdywgbWlkZGxlIC0gMSk7CiAgcXVpY2tzb3J0KGEsIG1pZGRsZSArIDEsIGhpZ2gpOwp9CgppbnQgc3BsaXQoaW50IGFbXSwgaW50IGxvdywgaW50IGhpZ2gpCnsKICBpbnQgcGFydF9lbGVtZW50ID0gYVtsb3ddOwoKICBmb3IgKDs7KSB7CiAgICB3aGlsZSAobG93IDwgaGlnaCAmJiBwYXJ0X2VsZW1lbnQgPD0gYVtoaWdoXSkKICAgICAgaGlnaC0tOwogICAgaWYgKGxvdyA+PSBoaWdoKSBicmVhazsKICAgIGFbbG93KytdID0gYVtoaWdoXTsKCiAgICB3aGlsZSAobG93IDwgaGlnaCAmJiBhW2xvd10gPD0gcGFydF9lbGVtZW50KQogICAgICBsb3crKzsKICAgIGlmIChsb3cgPj0gaGlnaCkgYnJlYWs7CiAgICBhW2hpZ2gtLV0gPSBhW2xvd107CiAgfQoKICBhW2hpZ2hdID0gcGFydF9lbGVtZW50OwogIHJldHVybiBoaWdoOwp9