#include <stdio.h>
void swap(int* a, int* b) {
int temp = *a;
*a = *b;
*b = temp;
}
int partition(int arr[], int low, int high) {
int pivot = arr[low];
int i = low + 1;
int j = high;
while (i <= j) {
while (i <= j && arr[i] <= pivot)
i++;
while (i <= j && arr[j] > pivot)
j--;
if (i < j) {
swap(&arr[i], &arr[j]);
}
}
swap(&arr[low], &arr[j]);
return j;
}
int findKthLargest(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 findKthLargest(arr, pivotIndex + 1, high, k);
} else {
return findKthLargest(arr, low, pivotIndex - 1, k);
}
}
return -1;
}
int main() {
int arr[] = {12, 4, 5, 6, 7, 3, 1, 15};
int size = sizeof(arr) / sizeof(arr[0]);
int k = 3;
printf("Original array: ");
for (int i = 0; i < size; i++)
printf("%d ", arr[i]);
printf("\n");
int kthLargest = findKthLargest(arr, 0, size - 1, k);
if (kthLargest != -1) {
printf("The %dth largest element is: %d\n", k, kthLargest);
} else {
printf("Invalid value of k or array size.\n");
}
return 0;
}