#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <limits.h>
void swap(int *x, int *y)
{
int temp = *x;
*x = *y;
*y = temp;
return ;
}
int median3(int a[], int left, int right)//Uses median of three partitioning technique
{
int center = (left + right)/2;
if (a[center] < a[left])
swap(&a[left],&a[center]);
if (a[right] < a[left])
swap(&a[left],&a[right]);
if (a[right]< a[center])
swap(&a[center],&a[right]);
swap(&a[center], &a[right - 1]);//since the largest is already in the right.
return a[right - 1];
}
void quicksort(int a[], int left, int right)
{
if (left < right) {
int pivot = median3(a,left,right);
if (left == right - 1) return;
int i = left;
int j = right - 1;
for ( ; ;) {
while(a[++i]<pivot) {}
while(pivot<a[--j]) {}
if ( i < j)
swap(&a[i],&a[j]);
else
break ;
}
swap(&a[i],& a[right -1]);
quicksort(a,left,i-1);
quicksort(a,i+1,right);
}
return ;
}
int main(int argc, char* argv[])
{
int i;
int a[] = {8,1,4,9,6,3,5,2,7,0};
quicksort(a,0,9);
for ( i = 0 ; i < 10 ; i++)
return 0;
}
ICAgICNpbmNsdWRlIDxzdGRpby5oPgogICAgI2luY2x1ZGUgPHN0ZGxpYi5oPgogICAgI2luY2x1ZGUgPHN0cmluZy5oPgogICAgI2luY2x1ZGUgPGxpbWl0cy5oPgogICAgCiAgICB2b2lkIHN3YXAoaW50ICp4LCBpbnQgKnkpCiAgICB7CiAgICAJaW50IHRlbXAgPSAqeDsKICAgIAkqeCA9ICp5OwogICAgCSp5ID0gdGVtcDsKICAgIAlyZXR1cm4gOwogICAgfQogICAgCiAgICBpbnQgbWVkaWFuMyhpbnQgYVtdLCBpbnQgbGVmdCwgaW50IHJpZ2h0KS8vVXNlcyBtZWRpYW4gb2YgdGhyZWUgcGFydGl0aW9uaW5nIHRlY2huaXF1ZQogICAgewogICAgCWludCBjZW50ZXIgPSAobGVmdCArIHJpZ2h0KS8yOwogICAgCWlmIChhW2NlbnRlcl0gPCBhW2xlZnRdKSAKICAgIAkJc3dhcCgmYVtsZWZ0XSwmYVtjZW50ZXJdKTsKICAgIAlpZiAoYVtyaWdodF0gPCBhW2xlZnRdKQogICAgCQlzd2FwKCZhW2xlZnRdLCZhW3JpZ2h0XSk7CiAgICAJaWYgKGFbcmlnaHRdPCBhW2NlbnRlcl0pCiAgICAJCXN3YXAoJmFbY2VudGVyXSwmYVtyaWdodF0pOwogICAgCQogICAgCXN3YXAoJmFbY2VudGVyXSwgJmFbcmlnaHQgLSAxXSk7Ly9zaW5jZSB0aGUgbGFyZ2VzdCBpcyBhbHJlYWR5IGluIHRoZSByaWdodC4KICAgIAlyZXR1cm4gYVtyaWdodCAtIDFdOwogICAgfQogICAgCiAgICB2b2lkIHF1aWNrc29ydChpbnQgYVtdLCBpbnQgbGVmdCwgaW50IHJpZ2h0KQogICAgewogICAgICBpZiAobGVmdCA8IHJpZ2h0KSB7CiAgICAJaW50IHBpdm90ID0gbWVkaWFuMyhhLGxlZnQscmlnaHQpOwogICAgICAgIGlmIChsZWZ0ID09IHJpZ2h0IC0gMSkgcmV0dXJuOwogICAgCWludCBpID0gbGVmdDsKICAgIAlpbnQgaiA9IHJpZ2h0IC0gMTsKICAgIAlmb3IgKCA7IDspIHsKICAgIAkJd2hpbGUoYVsrK2ldPHBpdm90KSB7fSAKICAgIAkJd2hpbGUocGl2b3Q8YVstLWpdKSB7fSAKICAgIAkJaWYgKCBpIDwgaikKICAgIAkJCXN3YXAoJmFbaV0sJmFbal0pOwogICAgCQllbHNlCiAgICAJCQlicmVhayA7CiAgICAJfQogICAgCXN3YXAoJmFbaV0sJiBhW3JpZ2h0IC0xXSk7CiAgICAJcXVpY2tzb3J0KGEsbGVmdCxpLTEpOwogICAgCXF1aWNrc29ydChhLGkrMSxyaWdodCk7CiAgICAgIH0KICAgIAlyZXR1cm4gOwogICAgfQogICAgCiAgICBpbnQgbWFpbihpbnQgYXJnYywgY2hhciogYXJndltdKQogICAgewogICAgCWludCBpOwogICAgCWludCBhW10gPSB7OCwxLDQsOSw2LDMsNSwyLDcsMH07CiAgICAJcXVpY2tzb3J0KGEsMCw5KTsKICAgIAlmb3IgKCBpID0gMCA7IGkgPCAxMCA7IGkrKykKICAgIAkJcHJpbnRmKCIlZFxuIixhW2ldKTsKICAgIAlyZXR1cm4gMDsKICAgIH0KCg==