#include <stdio.h>
void swap(int* a, int* b) {
int t = *a;
*a = *b;
*b = t;
}
int partition(int arr[], int low, int high) {
int pivot = arr[low];
int i = low + 1;
for (int j = low + 1; j <= high; j++) {
if (arr[j] > pivot) {
swap(&arr[i], &arr[j]);
i++;
}
}
swap(&arr[low], &arr[i - 1]);
return i - 1;
}
int quickSelect(int arr[], int low, int high, int k) {
if (low <= high) {
int pivotIndex = partition(arr, low, high);
if (pivotIndex == k - 1) {
return arr[pivotIndex];
} else if (pivotIndex > k - 1) {
return quickSelect(arr, low, pivotIndex - 1, k);
} else {
return quickSelect(arr, pivotIndex + 1, high, k);
}
}
return -1;
}
int findKthLargest(int arr[], int n, int k) {
if (k > 0 && k <= n) {
return quickSelect(arr, 0, n - 1, k);
}
return -1;
}
int main() {
int arr[] = {12, 4, 5, 6, 7, 3, 1, 15};
int n = sizeof(arr) / sizeof(arr[0]);
int k = 3;
int result = findKthLargest(arr, n, k);
if (result != -1) {
printf("The %dth largest element is: %d\n", k, result);
} else {
printf("Invalid input for K\n");
}
return 0;
}