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

Quick Sort Animation, Quick Sort in C
Quick Sort Animation, Quick Sort in C
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);
}

 

What is Quick Sort? Algorithm and C Program to Implement Quick Sort
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. 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?

  7. 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);

Leave a Comment

Your email address will not be published. Required fields are marked *