Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //zad 6
- int main{
- void swap(int *a, int *b) {
- int temp = *a;
- *a = *b;
- *b = temp;
- }
- int partition(int arr[], int left, int right) {
- int pivot = arr[right];
- int i = left - 1;
- for (int j = left; j < right; j++) {
- if (arr[j] < pivot) {
- i++;
- swap(&arr[i], &arr[j]);
- }
- }
- swap(&arr[i + 1], &arr[right]);
- return i + 1;
- }
- int quickselect(int arr[], int left, int right, int k) {
- if (left == right) {
- return arr[left];
- }
- int pivot_index = partition(arr, left, right);
- int num_smaller = pivot_index - left + 1;
- if (num_smaller == k) {
- return arr[pivot_index];
- } else if (k < num_smaller) {
- return quickselect(arr, left, pivot_index - 1, k);
- } else {
- return quickselect(arr, pivot_index + 1, right, k - num_smaller);
- }
- }
- int main() {
- int arr[] = {5, 3, 8, 2, 0, 7};
- int n = sizeof(arr) / sizeof(arr[0]);
- int k = 3;
- int kth_largest = quickselect(arr, 0, n - 1, n - k + 1);
- printf("The %d-th largest element in the array is %d\n", k, kth_largest);
- return 0;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement