Advertisement
DoGy70

Untitled

Mar 28th, 2023
25
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.15 KB | None | 0 0
  1. //zad 6
  2. int main{
  3. void swap(int *a, int *b) {
  4. int temp = *a;
  5. *a = *b;
  6. *b = temp;
  7. }
  8.  
  9. int partition(int arr[], int left, int right) {
  10. int pivot = arr[right];
  11. int i = left - 1;
  12.  
  13. for (int j = left; j < right; j++) {
  14. if (arr[j] < pivot) {
  15. i++;
  16. swap(&arr[i], &arr[j]);
  17. }
  18. }
  19.  
  20. swap(&arr[i + 1], &arr[right]);
  21. return i + 1;
  22. }
  23.  
  24. int quickselect(int arr[], int left, int right, int k) {
  25. if (left == right) {
  26. return arr[left];
  27. }
  28.  
  29. int pivot_index = partition(arr, left, right);
  30. int num_smaller = pivot_index - left + 1;
  31.  
  32. if (num_smaller == k) {
  33. return arr[pivot_index];
  34. } else if (k < num_smaller) {
  35. return quickselect(arr, left, pivot_index - 1, k);
  36. } else {
  37. return quickselect(arr, pivot_index + 1, right, k - num_smaller);
  38. }
  39. }
  40.  
  41. int main() {
  42. int arr[] = {5, 3, 8, 2, 0, 7};
  43. int n = sizeof(arr) / sizeof(arr[0]);
  44. int k = 3;
  45.  
  46. int kth_largest = quickselect(arr, 0, n - 1, n - k + 1);
  47.  
  48. printf("The %d-th largest element in the array is %d\n", k, kth_largest);
  49.  
  50. return 0;
  51. }
  52. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement