import java.io.
*;
import java.util.Random;
import java.util.Scanner;
class GFG {
// A utility function to swap two elements
static void swap(int[] arr, int i, int j)
{
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
// This function takes last element as pivot,
// places the pivot element at its correct position
// in sorted array, and places all smaller to left
// of pivot and all greater elements to right of pivot
static int partition(int[] arr, int low, int high)
// Choosing the pivot
int pivot = arr[high];
// Index of smaller element and indicates
// the right position of pivot found so far
int i = (low - 1);
for (int j = low; j <= high - 1; j++) {
// If current element is smaller than the pivot
if (arr[j] < pivot) {
// Increment index of smaller element
i++;
swap(arr, i, j);
}
}
swap(arr, i + 1, high);
return (i + 1);
// The main function that implements QuickSort
// arr[] --> Array to be sorted,
// low --> Starting index,
// high --> Ending index
static void quickSort(int[] arr, int low, int high)
if (low < high) {
// pi is partitioning index, arr[p]
// is now at right place
int pi = partition(arr, low, high);
// Separately sort elements before
// partition and after partition
quickSort(arr, low, pi - 1);
quickSort(arr, pi + 1, high);
// To print sorted array
public static void printArr(int[] arr)
{
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
System.out.println();
// Driver Code
public static void main(String[] args)
Scanner scanner = new Scanner(System.in);
Random rand = new Random();
System.out.println("Enter the number of elements in the array:");
int N = scanner.nextInt();
int[] arr = new int[N];
System.out.println("Generating random elements for the array:");
for (int i = 0; i < N; i++) {
arr[i] = rand.nextInt(100); // Generates a random integer between 0 and 99
printArr(arr);
// Measure the start time
long startTime = System.nanoTime();
// Function call to sort the array
quickSort(arr, 0, N - 1);
// Measure the end time
long endTime = System.nanoTime();
// Calculate the time taken
long timeTaken = endTime - startTime;
System.out.println("Sorted array:");
printArr(arr);
System.out.println("Time taken to sort the array: " + timeTaken + " nanoseconds");
scanner.close();