#include<stdio.h>
 
void swap(int *i, int *j)
{
    int temp = *i;
    *i = *j;
    *j = temp;
}
 
int partition(int arr[], int start, int end)
{
    int pivot = arr[end];
    int i = start;
    int j = end-1;
    while(i<=j)
    {
        while(arr[i]<pivot)
            i++;
 		while(arr[j]>pivot)
            j--;
 		if(i<=j)
        {
            swap(&arr[i],&arr[j]);
            i++;
            j--;
        }
    }
    
    swap(&arr[i],&arr[end]);
    return i;
}
 
void performQuickSort(int arr[], int start, int end)
{
    if(start<end)
    {
        int p = partition(arr, start, end);
        performQuickSort(arr, start, p-1);
        performQuickSort(arr, p+1, end);
    }
}

void quickSort(int arr[], int size)
{
    performQuickSort(arr, 0, size-1);
}
 
// driver program
int main(void)
{
    int i;
    int arr[10] = {2, 6, 4, 10, 8, 1, 9, 5, 3, 7};
 
    quickSort(arr,10);
    
    printf("The 5th largest number in array is:-  %d", arr[10 - 5]);
    return 0;
}
