Evaluating Randomized QuickSort
I’m assessing the benefits of Randomized QuickSort, together with its potential to sidestep worst-case time complexity and keep common O(n log n) time complexity. The methodology stays in-place and environment friendly.
Testing completely different eventualities
I’m piecing collectively varied check instances for the QuickSort algorithm, together with empty, single factor, already sorted, reverse sorted, random arrays, duplicates, and huge random arrays earlier than and after sorting.
————
Certainly! To remediate the worst-case efficiency of QuickSort, we are able to randomize the pivot choice. This method ensures that the algorithm performs effectively on common, even for inputs that might trigger the usual QuickSort to degrade to O(n²) time complexity.
Below is the up to date C++ code with randomized pivot choice, together with the check suite:
#embrace <iostream>
#embrace <vector>
#embrace <cstdlib> // For rand(), srand()
#embrace <ctime> // For time()
// Function to swap two integers
void swap(int& a, int& b) {
int temp = a;
a = b;
b = temp;
}
// Partition operate with randomized pivot choice
int partition(int arr[], int low, int excessive) {
// Randomly choose a pivot index between high and low
int pivotIndex = low + rand() % (excessive - low + 1);
// Swap the pivot with the final factor
swap(arr[pivotIndex], arr[high]);
int pivot = arr[high]; // Now the pivot is at arr[high]
int i = (low - 1); // Index of the smaller factor
for (int j = low; j <= excessive - 1; j++) {
// If the present factor is smaller than the pivot
if (arr[j] < pivot) {
i++; // Increment index of smaller factor
swap(arr[i], arr[j]); // Swap
}
}
swap(arr[i + 1], arr[high]); // Place pivot on the appropriate place
return (i + 1);
}
// QuickSort operate
void quickSort(int arr[], int low, int excessive) {
if (low < excessive) {
// Partitioning index
int pi = partition(arr, low, excessive);
// Recursively type parts earlier than and after partition
quickSort(arr, low, pi - 1);
quickSort(arr, pi + 1, excessive);
}
}
// Function to print an array
void printArray(const int arr[], int dimension) {
for (int i = 0; i < dimension; i++)
std::cout << arr[i] << " ";
std::cout << std::endl;
}
// Test suite for the quickSort operate
void testQuickSort() {
std::cout << "Testing quickSort operate with randomized pivot...