Generate Random Number In Dev C++
C program to generate pseudo-random numbers using rand and random function (Turbo C compiler only). As the random numbers are generated by an algorithm used in a function they are pseudo-random, this is the reason that word pseudo is used. Function rand returns a pseudo-random number between 0 and RANDMAX. The C standard library includes a pseudo random number generator for generating random numbers. In order to use it we need to include the header. To generate a random number we use the rand function. This will produce a result in the range 0 to RANDMAX, where RANDMAX is a constant defined by the implementation.
In this article we will discuss how to implement QuickSort using random pivoting. In QuickSort we first partition the array in place such that all elements to the left of the pivot element are smaller, while all elements to the right of the pivot are greater that the pivot. Then we recursively call the same procedure for left and right subarrays.
Unlike merge sort we don’t need to merge the two sorted arrays. Thus Quicksort requires lesser auxillary space than Merge Sort, which is why it is often preferred to Merge Sort.Using a randomly generated pivot we can further improve the time complexity of QuickSort.
We have discussed at two popular methods for partioning the arrays-Hoare’s vs Lomuto partition scheme
It is advised that the reader has read that article or knows how to implement the QuickSort using either of the two partition schemes.
Algorithm for random pivoting using Lomuto Partitioning

Algorithm for random pivoting using Hoare Partitioning
Random Numbers In C++ Pdf
Below is the CPP implementation of the Algorithms
Lomuto (C++)

/* C++ implementation QuickSort using Lomuto's partition #include <cstdlib> usingnamespacestd; /* This function takes last element as pivot, places the pivot element at its correct position in sorted array, and places all smaller (smaller than pivot) to left of pivot and all greater elements to right intpartition(intarr[], intlow, inthigh) intpivot = arr[high]; // pivot inti = (low - 1); // Index of smaller element for(intj = low; j <= high - 1; j++) { // If current element is smaller than or if(arr[j] <= pivot) { i++; // increment index of smaller element } swap(arr[i + 1], arr[high]); } // Generates Random Pivot, swaps pivot with intpartition_r(intarr[], intlow, inthigh) // Generate a random number in between srand(time(NULL)); swap(arr[random], arr[high]); returnpartition(arr, low, high); arr[] --> Array to be sorted, high --> Ending index */{ /* pi is partitioning index, arr[p] is now intpi = partition_r(arr, low, high); // Separately sort elements before quickSort(arr, low, pi - 1); } voidprintArray(intarr[], intsize) inti; printf('%d ', arr[i]); } // Driver program to test above functions { intn = sizeof(arr) / sizeof(arr[0]); printf('Sorted array:'); return0; |
Hoare (C++)
partition scheme. */#include <iostream> /* This function takes last element as pivot, places the pivot element at its correct position in sorted array, and places all smaller (smaller than pivot) to left of pivot and all greater elements to right intpartition(intarr[], intlow, inthigh) intpivot = arr[low]; // or equal to pivot i++; // or equal to pivot j--; if(i >= j) } // end element and calls the partition function // In Hoare partition the low element is selected intpartition_r(intarr[], intlow, inthigh) // Generate a random number in between srand(time(NULL)); swap(arr[random], arr[low]); returnpartition(arr, low, high); arr[] --> Array to be sorted, high --> Ending index */{ /* pi is partitioning index, arr[p] is now intpi = partition_r(arr, low, high); // Separately sort elements before quickSort(arr, low, pi); } voidprintArray(intarr[], intn) for(inti = 0; i < n; i++) printf('); intmain() intarr[] = { 10, 7, 8, 9, 1, 5 }; quickSort(arr, 0, n - 1); printArray(arr, n); } |

Output:
Notes
- Using random pivoting we improve the expected or average time complexity to O (N log N). The Worst Case complexity is still O ( N^2 ).