# Quick Sort in C [Program & Algorithm]

In this tutorial you will learn about algorithm and program for quick sort in C.

Quick sort is the fastest internal sorting algorithm with the time complexity O (n log n). The basic algorithm to sort an array a[ ] of n elements can be described recursively as follows:

## Quick Sort Algorithm

1. If n < = 1, then return.

2. Pick any element V in a[]. This is called the pivot.

3. Rearrange elements of the array by moving all elements xi > V right of V and all elements x­i < = V left of V. If the place of the V after re-arrangement is j, all elements with value less than V, appear in a[0], a[1] . . . . a[j – 1] and all those with value greater than V appear in a[j + 1] . . . . a[n – 1].

4. Apply quick sort recursively to a[0] . . . . a[j – 1] and to a[j + 1] . . . . a[n – 1].

## Quick Sort Animation

Visualization of the quicksort algorithm. The horizontal lines are pivot values.

## Quick Sort Program in C

```#include <stdio.h>

void quick_sort(int[],int,int);
int partition(int[],int,int);

int main()
{
int a[50],n,i;
printf("How many elements?");
scanf("%d",&n);
printf("\nEnter array elements:");

for(i=0;i<n;i++)
scanf("%d",&a[i]);

quick_sort(a,0,n-1);
printf("\nArray after sorting:");

for(i=0;i<n;i++)
printf("%d ",a[i]);

return 0;
}

void quick_sort(int a[],int l,int u)
{
int j;
if(l<u)
{
j=partition(a,l,u);
quick_sort(a,l,j-1);
quick_sort(a,j+1,u);
}
}

int partition(int a[],int l,int u)
{
int v,i,j,temp;
v=a[l];
i=l;
j=u+1;

do
{
do
i++;

while(a[i]<v&&i<=u);

do
j--;
while(v<a[j]);

if(i<j)
{
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}while(i<j);

a[l]=a[j];
a[j]=v;

return(j);
}```

If you found anything incorrect or have any doubts regarding above quick sort in C tutorial then comment below.

### 24 thoughts on “Quick Sort in C [Program & Algorithm]”

1. Devendra Prajapati

If i want to Enter 100 or MORE Number then……
_____

User Want Enter Any Number so..

What he/she will do??

2. Sir,
you have to return the array in order to print it the array after sorting.And we should sort the key as well i.e,pivot element
So the j in the calling of quicksort equals to j in any of the call

3. I seriously love the animation part, which makes it more interesting to see the content.
And Sir, you program’s are so, accurate and efficient.
Thank you for providing us this website and helping new coder like me, to get to know, what exactly is a GOOD CODE to approach.

You are seriously doing a good job.
Thank you.

4. void quick_sort(int a[],int l,int u)
{
int j;
if(l<u)
{
j=partition(a,l,u);
quick_sort(a,l,j-1);
quick_sort(a,j+1,u);
}

can anyone explain this??

1. When you take a pivot element and sort all the elements based on that,u need to call quick sort for left group and right group.J is pivot element so here we are calling quicksort for left and right.

5. Hi admin, i’ve been reading your page for some time and I really like coming back
here. I can see that you probably don’t make money
on your page. I know one interesting method of earning
money, I think you will like it. Search google for:
dracko’s tricks

6. Sir I just love your content. Keep it up. Wish i could meet you in person and share a hug.

7. int partition(int a[],int l,int u)
{
int v,i,j,temp;
v=a[l];
i=l;
j=u+1;

do
{
do
i++;

while(a[i]<v&&i<=u);

do
j–;
while(v<a[j]);

if(i<j)
{
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}while(i<j);

a[l]=a[j];
a[j]=v;
can any one explain me this?

8. I believe partition() has an error. In this loop, it is possible to access a[i] where i > u:

do
{
i++;
}
while(a[i]<v&&i<=u);

On the first call to partition, when u will usually be equal to the last valid index for a[], we will attempt to access memory beyond the array's upper bound. This may crash the program. The solution is simply to reverse the order of the operands in the test:

do
{
i++;
}
while(i<=u&&a[i]<v);

9. I think the first do – while block should compare against:
} while( array[i] < v && i < u);