Guest User

Untitled

a guest
Nov 24th, 2017
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.72 KB | None | 0 0
  1. /**
  2. Quick Selection Time = O(n)
  3. Quick Selection T(n) = T(n/2) + O(n) = T(n/4) + O(n/2) + O(n) = O(n + n/2 + n/4 + ...+ 1) = O(2n)
  4. Quick Sort T(n) = 2T(n/2) + O(n) = 4T(n/4) + 2*O(n/2) + O(n) = logn * O(n) = nlogn
  5. */
  6. public static void main(String[] args) {
  7. Solution sol = new Solution();
  8. int[] nums = new int[]{-4,6,1,76,2,3,3,5};
  9. System.out.print(sol.quickSelection(nums, 8));
  10. }
  11.  
  12. public int quickSelection(int[] nums, int k) {
  13. return partition(nums, 0, nums.length - 1, k);
  14. }
  15. private int partition(int[] nums, int left, int right, int k) {
  16. if (left == right) return nums[left];
  17. int pivotIndex = getPivot(left, right);
  18. int pos = quickSelect(nums, pivotIndex, left, right);
  19. if (pos == k - 1) {
  20. return nums[pos];
  21. } else if (pos < k - 1) {
  22. return partition(nums, pos + 1, right, k);
  23. } else {
  24. return partition(nums, left, pos - 1, k);
  25. }
  26. }
  27. private int quickSelect(int[] nums, int pivotIndex, int left, int right) {
  28. int pivot = nums[pivotIndex];
  29. swap(nums, pivotIndex, right);
  30. int i = left; int j = right;
  31. while (i <= j) {
  32. if (nums[i] > pivot) {
  33. i++;
  34. } else if (nums[j] <= pivot) {
  35. j--;
  36. } else {
  37. swap(nums, i++, j--);
  38. }
  39. }
  40. swap(nums, i, right);
  41. return i;
  42. }
  43. private void swap(int[] nums, int i, int j) {
  44. int temp = nums[i];
  45. nums[i] = nums[j];
  46. nums[j] = temp;
  47. }
  48. private int getPivot(int left, int right) {
  49. Random rd = new Random();
  50. return left + rd.nextInt(right - left + 1);
  51. }
Add Comment
Please, Sign In to add comment