From 83ac9063fd882089eb9e5a2c4998c8a1ee4d8c0c Mon Sep 17 00:00:00 2001 From: ElzhanZhandos <150348751+Elzhan2007@users.noreply.github.com> Date: Fri, 26 Sep 2025 12:31:42 +0500 Subject: [PATCH] Upload --- select.java | 67 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 select.java diff --git a/select.java b/select.java new file mode 100644 index 0000000..7f90eb8 --- /dev/null +++ b/select.java @@ -0,0 +1,67 @@ +// Deterministic select +import java.util.Arrays; + +public class select { + + public static int medianOfMedians(int[] arr) { + int n = arr.length; + int groupsCount = (n + 4) / 5; + int[] medians = new int[groupsCount]; + + for (int i = 0; i < groupsCount; i++) { + int start = i * 5; + int end = Math.min(start + 5, n); + int[] group = Arrays.copyOfRange(arr, start, end); + Arrays.sort(group); + medians[i] = group[group.length / 2]; + } + + if (medians.length <= 5) { + Arrays.sort(medians); + return medians[medians.length / 2]; + } else { + return medianOfMedians(medians); + } + } + + public static int partition(int[] arr, int low, int high, int pivot) { + int i = low; + for (int j = low; j < high; j++) { + if (arr[j] < pivot) { + int temp = arr[i]; + arr[i] = arr[j]; + arr[j] = temp; + i++; + } + } + int temp = arr[i]; + arr[i] = arr[high]; + arr[high] = temp; + return i; + } + + public static int deterministicSelect(int[] arr, int low, int high, int k) { + if (low == high) { + return arr[low]; + } + + int pivot = medianOfMedians(Arrays.copyOfRange(arr, low, high + 1)); + + int pivotIndex = partition(arr, low, high, pivot); + + if (pivotIndex == k) { + return arr[pivotIndex]; + } else if (pivotIndex > k) { + return deterministicSelect(arr, low, pivotIndex - 1, k); + } else { + return deterministicSelect(arr, pivotIndex + 1, high, k); + } + } + + public static void main(String[] args) { + int[] arr = {38, 27, 43, 3, 9, 82, 10}; + int k = 3; + int result = deterministicSelect(arr, 0, arr.length - 1, k); + System.out.println("The " + (k + 1) + "-th smallest element is: " + result); + } +}