#include <stdio.h>
#include <time.h>
// Quicksort implementation as per Session 3 logic [cite: 13, 77]
int partition(int arr[], int low, int high) {
int pivot = arr[high]; // Choosing the last element as pivot [cite: 77]
int i = (low - 1);
for (int j = low; j < high; j++) {
// If current element is smaller than or equal to pivot [cite: 77]
if (arr[j] <= pivot) {
i++;
// Swap arr[i] and arr[j] [cite: 77]
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
// Final pivot swap to place it in the sorted position [cite: 77]
int temp = arr[i + 1];
arr[i + 1] = arr[high];
arr[high] = temp;
return (i + 1);
}
void quickSort(int arr[], int low, int high) {
if (low < high) {
// Find pivot index such that smaller elements are on left [cite: 77]
int pi = partition(arr, low, high);
quickSort(arr, low, pi - 1);
quickSort(arr, pi + 1, high);
}
}
int main() {
int n = 5000; // You can change this to 5000 or 10000 for your report
int arr[n];
clock_t start, end;
// Seed the random number generator
// Fill the array with random numbers as per lab manual guidelines
for (int i = 0; i < n; i++) {
}
printf("Sorting %d elements using Quicksort...\n", n
);
// Capture start time
// Call the function (ensure your parameters match your manual's quickSort)
quickSort(arr, 0, n - 1);
// Capture end time
double time_taken = ((double)(end - start)) / CLOCKS_PER_SEC;
printf("Execution Successful!\n"); printf("Time Taken: %f seconds\n", time_taken
);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDx0aW1lLmg+CgovLyBRdWlja3NvcnQgaW1wbGVtZW50YXRpb24gYXMgcGVyIFNlc3Npb24gMyBsb2dpYyBbY2l0ZTogMTMsIDc3XQppbnQgcGFydGl0aW9uKGludCBhcnJbXSwgaW50IGxvdywgaW50IGhpZ2gpIHsKICAgIGludCBwaXZvdCA9IGFycltoaWdoXTsgLy8gQ2hvb3NpbmcgdGhlIGxhc3QgZWxlbWVudCBhcyBwaXZvdCBbY2l0ZTogNzddCiAgICBpbnQgaSA9IChsb3cgLSAxKTsKICAgIGZvciAoaW50IGogPSBsb3c7IGogPCBoaWdoOyBqKyspIHsKICAgICAgICAvLyBJZiBjdXJyZW50IGVsZW1lbnQgaXMgc21hbGxlciB0aGFuIG9yIGVxdWFsIHRvIHBpdm90IFtjaXRlOiA3N10KICAgICAgICBpZiAoYXJyW2pdIDw9IHBpdm90KSB7CiAgICAgICAgICAgIGkrKzsKICAgICAgICAgICAgLy8gU3dhcCBhcnJbaV0gYW5kIGFycltqXSBbY2l0ZTogNzddCiAgICAgICAgICAgIGludCB0ZW1wID0gYXJyW2ldOwogICAgICAgICAgICBhcnJbaV0gPSBhcnJbal07CiAgICAgICAgICAgIGFycltqXSA9IHRlbXA7CiAgICAgICAgfQogICAgfQogICAgLy8gRmluYWwgcGl2b3Qgc3dhcCB0byBwbGFjZSBpdCBpbiB0aGUgc29ydGVkIHBvc2l0aW9uIFtjaXRlOiA3N10KICAgIGludCB0ZW1wID0gYXJyW2kgKyAxXTsKICAgIGFycltpICsgMV0gPSBhcnJbaGlnaF07CiAgICBhcnJbaGlnaF0gPSB0ZW1wOwogICAgcmV0dXJuIChpICsgMSk7Cn0KCnZvaWQgcXVpY2tTb3J0KGludCBhcnJbXSwgaW50IGxvdywgaW50IGhpZ2gpIHsKICAgIGlmIChsb3cgPCBoaWdoKSB7CiAgICAgICAgLy8gRmluZCBwaXZvdCBpbmRleCBzdWNoIHRoYXQgc21hbGxlciBlbGVtZW50cyBhcmUgb24gbGVmdCBbY2l0ZTogNzddCiAgICAgICAgaW50IHBpID0gcGFydGl0aW9uKGFyciwgbG93LCBoaWdoKTsKICAgICAgICBxdWlja1NvcnQoYXJyLCBsb3csIHBpIC0gMSk7CiAgICAgICAgcXVpY2tTb3J0KGFyciwgcGkgKyAxLCBoaWdoKTsKICAgIH0KfQoKCmludCBtYWluKCkgewogICAgaW50IG4gPSA1MDAwOyAvLyBZb3UgY2FuIGNoYW5nZSB0aGlzIHRvIDUwMDAgb3IgMTAwMDAgZm9yIHlvdXIgcmVwb3J0CiAgICBpbnQgYXJyW25dOwogICAgY2xvY2tfdCBzdGFydCwgZW5kOwoKICAgIC8vIFNlZWQgdGhlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yCiAgICBzcmFuZCh0aW1lKDApKTsgCgogICAgLy8gRmlsbCB0aGUgYXJyYXkgd2l0aCByYW5kb20gbnVtYmVycyBhcyBwZXIgbGFiIG1hbnVhbCBndWlkZWxpbmVzCiAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykgewogICAgICAgIGFycltpXSA9IHJhbmQoKSAlIDEwMDAwOyAKICAgIH0KCiAgICBwcmludGYoIlNvcnRpbmcgJWQgZWxlbWVudHMgdXNpbmcgUXVpY2tzb3J0Li4uXG4iLCBuKTsKCiAgICAvLyBDYXB0dXJlIHN0YXJ0IHRpbWUKICAgIHN0YXJ0ID0gY2xvY2soKTsgCiAgICAKICAgIC8vIENhbGwgdGhlIGZ1bmN0aW9uIChlbnN1cmUgeW91ciBwYXJhbWV0ZXJzIG1hdGNoIHlvdXIgbWFudWFsJ3MgcXVpY2tTb3J0KQogICAgcXVpY2tTb3J0KGFyciwgMCwgbiAtIDEpOyAKICAgIAogICAgLy8gQ2FwdHVyZSBlbmQgdGltZQogICAgZW5kID0gY2xvY2soKTsgCgogICAgZG91YmxlIHRpbWVfdGFrZW4gPSAoKGRvdWJsZSkoZW5kIC0gc3RhcnQpKSAvIENMT0NLU19QRVJfU0VDOwoKICAgIHByaW50ZigiRXhlY3V0aW9uIFN1Y2Nlc3NmdWwhXG4iKTsKICAgIHByaW50ZigiVGltZSBUYWtlbjogJWYgc2Vjb25kc1xuIiwgdGltZV90YWtlbik7CgogICAgcmV0dXJuIDA7Cn0=