#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int count=0;
int partition(int a[], int low,int high)
{
int pivot=a[low],temp,i=low+1,j=high;
while(1)
{
//Traverse i from left to right, segregating element of left group
while(i<=high && a[i]<=pivot)//a[i]<=pivot used for avoiding multiple duplicates
{
i++; count++;
}
//Traverse j from right to left, segregating element of right group
while(j>0 && a[j]>pivot)
{
j--; count++;
}
count+=2;
//If grouping is incomplete
if(i<j)
{
temp = a[i];
a[i] = a[j];
a[j] =temp;
}
else if(i>j)//If grouping is completed
{
temp = a[low];
a[low] = a[j];
a[j] = temp;
return j;
}
else //Duplicate of Pivot found
return j;
}
}
void quicksort(int a[],int low, int high)
{
int s;
if(low<high)
{
//partition to place pivot element in between left and right group
s = partition(a,low,high);
quicksort(a,low,s-1);
quicksort(a,s+1,high);
}
}
int main()
{
int a[10000],n;
printf("Enter the number of elements in an array:");
scanf("%d",&n);
printf("All the elements:");
srand(time(0));
for(int i=0;i<n;i++)
{
a[i]=rand();
printf("%d ",a[i]);
}
quicksort(a,0,n-1);
printf("\nAfter sorting\n");
for(int i=0;i<n;i++)
printf("%d ", a[i]);
printf("\nNumber of basic operations = %d\n",count);
}
I2luY2x1ZGU8c3RkaW8uaD4KI2luY2x1ZGU8c3RkbGliLmg+CiNpbmNsdWRlPHRpbWUuaD4KaW50IGNvdW50PTA7CmludCBwYXJ0aXRpb24oaW50IGFbXSwgaW50IGxvdyxpbnQgaGlnaCkKewppbnQgcGl2b3Q9YVtsb3ddLHRlbXAsaT1sb3crMSxqPWhpZ2g7CndoaWxlKDEpCnsKLy9UcmF2ZXJzZSBpIGZyb20gbGVmdCB0byByaWdodCwgc2VncmVnYXRpbmcgZWxlbWVudCBvZiBsZWZ0IGdyb3VwCndoaWxlKGk8PWhpZ2ggJiYgYVtpXTw9cGl2b3QpLy9hW2ldPD1waXZvdCB1c2VkIGZvciBhdm9pZGluZyBtdWx0aXBsZSBkdXBsaWNhdGVzCnsKaSsrOyBjb3VudCsrOwp9Ci8vVHJhdmVyc2UgaiBmcm9tIHJpZ2h0IHRvIGxlZnQsIHNlZ3JlZ2F0aW5nIGVsZW1lbnQgb2YgcmlnaHQgZ3JvdXAKd2hpbGUoaj4wICYmIGFbal0+cGl2b3QpCnsKai0tOyBjb3VudCsrOwp9CmNvdW50Kz0yOwovL0lmIGdyb3VwaW5nIGlzIGluY29tcGxldGUKaWYoaTxqKQp7CnRlbXAgPSBhW2ldOwphW2ldID0gYVtqXTsKYVtqXSA9dGVtcDsKfQplbHNlIGlmKGk+aikvL0lmIGdyb3VwaW5nIGlzIGNvbXBsZXRlZAp7CnRlbXAgPSBhW2xvd107CmFbbG93XSA9IGFbal07CmFbal0gPSB0ZW1wOwpyZXR1cm4gajsKfQplbHNlIC8vRHVwbGljYXRlIG9mIFBpdm90IGZvdW5kCnJldHVybiBqOwp9Cn0Kdm9pZCBxdWlja3NvcnQoaW50IGFbXSxpbnQgbG93LCBpbnQgaGlnaCkKewppbnQgczsKaWYobG93PGhpZ2gpCnsKLy9wYXJ0aXRpb24gdG8gcGxhY2UgcGl2b3QgZWxlbWVudCBpbiBiZXR3ZWVuIGxlZnQgYW5kIHJpZ2h0IGdyb3VwCnMgPSBwYXJ0aXRpb24oYSxsb3csaGlnaCk7CnF1aWNrc29ydChhLGxvdyxzLTEpOwpxdWlja3NvcnQoYSxzKzEsaGlnaCk7Cn0KfQppbnQgbWFpbigpCnsKaW50IGFbMTAwMDBdLG47CnByaW50ZigiRW50ZXIgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiBhbiBhcnJheToiKTsKc2NhbmYoIiVkIiwmbik7CnByaW50ZigiQWxsIHRoZSBlbGVtZW50czoiKTsKc3JhbmQodGltZSgwKSk7CmZvcihpbnQgaT0wO2k8bjtpKyspCnsKYVtpXT1yYW5kKCk7CnByaW50ZigiJWQgIixhW2ldKTsKfQpxdWlja3NvcnQoYSwwLG4tMSk7CnByaW50ZigiXG5BZnRlciBzb3J0aW5nXG4iKTsKZm9yKGludCBpPTA7aTxuO2krKykKcHJpbnRmKCIlZCAiLCBhW2ldKTsKcHJpbnRmKCJcbk51bWJlciBvZiBiYXNpYyBvcGVyYXRpb25zID0gJWRcbiIsY291bnQpOwp9