import java.util.Arrays; import java.util.Random; public class QuickSelect { public static int partition (int[] arr, int low, int high) { Random randomGenerator = new Random(); int randomInt = randomGenerator.ints(low, high).findFirst().getAsInt(); int pivot = arr[randomInt]; int start = low -1; int temp = 0; for (int i = low; i < high; i++) { if(arr[i] < pivot) { start++; temp = arr[start]; arr[start] = arr[i]; arr[i] = temp; } } start++; temp = arr[start]; arr[start] = pivot; arr[randomInt] = temp; return pivotloc; } public static int kthSmallest(int[] arr, int low, int high, int k) { if(low>=high) return arr[low]; int pivotloc = partition(arr,low,high); if(k == pivotloc + 1) { return arr[pivotloc]; } else if(k < pivotloc + 1) { return kthSmallest(arr, low, pivotloc, k); } return kthSmallest(arr, pivotloc + 1, high, k - pivotloc - 1); } public static void main(String[] args) { //replace with samples while running int[] array = new int[]{10,11,12,3,5,6,7,8}; int kPosition = 3; int length = array.length; System.out.println("K-th smallest element in array : " + kthSmallest(array , 0, length, kPosition)); } }
Above is the randomized algorithm implementation.
2.
Median of three:
T(n)=T(n/3)+T(n−3((n/3)/2−2))+O(n)
=T(n/3)+T(5n/10+6)+O(n)
=O(n)
Median of five:
T(n)=T(n/5)+T(n−3((n/5)/2−2))+O(n)
=T(n/5)+T(7n/10+6)+O(n)
=T(n/5)+T(7n/10)+O(n)
3.
Algorithm | n = 1, 000, 000 | n = 5,000,000 | n = 10,000,000 |
Randommized | 1,835,954 | 9,323,894 | N/A |
Median of Three | N/A | ||
Median of Five | N/A |