Sort the elements of an array A in ascending order.
Quick-sort uses recursive calls for sorting the elements.
Is an example for divide-and-conquer algorithmic technique.
Divide: the array A[low … high] is partitioned into two non-empty sub arrays
- A[low … q] and A[q+1 … high],
- such that each element of A[low … q] is less than or equal to each element of A[q+1 … high].
- The index q is computed as part of this portioning procedure.
Conquer: The two sub arrays A[low … q] and A[q+1 … high] are sorted by recursive calls to Quick sort.
The recursive algorithm consists of four steps:
- If there is one or no elements in the array to be sorted, return.
- Pick an element in the array to serve as “pivot” point. (usually the leftmost element in the array is used).
- Split the array into two parts – one with elements larger than the pivot and the other with elements smaller than the pivot.
- Recursively repeat the algorithm for both halves of the original array.
Difficulty level
This exercise is mostly suitable for students
#include<stdio.h>
#include<conio.h>
#define SIZE 50
void swap(int *A, int i, int j)
{
int aux;
aux=A[i];
A[i]=A[j];
A[j]=aux;
}
int Partition(int A[], int low, int high)
{
int left, right, pivot_item=A[low];
left = low+1; right = high;
while(left<=right)
{
/* Move left while item < pivot */
while(A[left] <= pivot_item && left<=right) left ++;
/* Move right while item > pivot */
while(A[right] > pivot_item && left<=right) right --;
if(left<right) { swap(A, left, right); left ++; right --; }
}
/* right is final position for the pivot */
A[low]=A[right];
A[right]=pivot_item;
return right;
}
void QuickSort(int A[], int low, int high)
{
int pivot ;
/* Terminal Condition */
if(high > low)
{
pivot = Partition(A, low, high);
QuickSort(A, low, pivot-1);
QuickSort(A, pivot+1, high);
}
}
void sort(int A[], int N)
{
QuickSort(A, 0, N-1);
}
void main()
{
int A[SIZE], N;
int i;
do {
printf("Enter the dimension: ");
scanf("%d", &N);
} while (N <= 0 || N > SIZE);
for (i = 0; i < N; i++)
{
printf("Enter A[%d]: ", i);
scanf("%d", &A[i]);
}
sort(A,N);
printf("\n\n** After sorting ** \n");
for (i = 0; i < N; i++)
{
printf("A[%d]=%d\n", i, A[i]);
}
getch();
}
Back to the list of exercises
Looking for a more challenging exercise, try this one !!
Binary tree rotations