Advertisement
Guest User

Untitled

a guest
Apr 29th, 2017
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.04 KB | None | 0 0
  1. import java.util.Random;
  2. import java.util.Arrays;
  3. /* Name: Ali H. Iqbal
  4. * Course: CSC-130
  5. * Instructor: Professor Jinsong Ouyang
  6. * Assignment #4 : KthLargestNumber*
  7. */
  8. public class KthLargestNum {
  9.  
  10. public static void main(String[] args) {
  11. Random gen = new Random(1234567);
  12. int[] num = new int[1000000];
  13. for (int i = 0; i < num.length; i++) {
  14. num[i] = gen.nextInt();
  15. }
  16.  
  17. int kthLargest, kth = 7;
  18. Heap hp = new Heap(num);
  19. kthLargest = hp.kthLargest(kth);
  20. System.out.printf("HeapSort: The %dth largest number is %d.\n", kth, kthLargest);
  21.  
  22. quickSelect quick = new quickSelect(num);
  23. kthLargest = quick.kthLargest(kth);
  24. System.out.printf("QuickSelect: The %dth largest number is %d.\n", kth, kthLargest);
  25. }
  26. }
  27.  
  28. class quickSelect {
  29. private int[] arr;
  30.  
  31. public quickSelect(int[] arr){
  32. this.arr = Arrays.copyOf(arr, arr.length);
  33. }
  34.  
  35. public int kthLargest(int kth){
  36. return kthLargest(0, arr.length-1, kth);
  37. }
  38.  
  39. public int kthLargest(int left, int right, int kth){
  40. int curr = numSplit(left, right);
  41. if (curr-left == kth-1) {
  42. return arr[curr];
  43. }
  44. if (curr-left > kth-1) {
  45. return kthLargest(left, curr-1, kth);
  46. }
  47.  
  48. return kthLargest(curr+1, right, kth-curr+left-1);
  49. }
  50.  
  51. public void swap(int x, int y){
  52. int z = arr[x];
  53. arr[x] = arr[y];
  54. arr[y] = z;
  55. }
  56.  
  57. public int part(int left, int right){//partition
  58. int i = left;
  59. for (int j=left; j <= right-1; j++){
  60. if (arr[j] > arr[right]){
  61. swap(i, j);
  62. i++;
  63. }
  64. }
  65. swap(i, right);
  66. return i;
  67. }
  68.  
  69. public int numSplit(int left, int right){
  70. int piv = (int)(Math.random()*(right-left+1));
  71. swap(left + piv, right);
  72. return part(left, right);
  73. }
  74. }
  75.  
  76. class Heap {
  77. private int[] arr;
  78. private int hpSize;
  79.  
  80. public Heap(int[] arr){
  81. this.arr = Arrays.copyOf(arr, arr.length);
  82. this.hpSize = this.arr.length;
  83. }
  84. public void buildHeap(){
  85. hpSize = size() - 1;
  86. for(int i=(size()/2); i >= 0; i--){
  87. heapify(i);
  88. }
  89. }
  90. public int size(){
  91. return arr.length;
  92. }
  93.  
  94. public void swap(int x, int y){
  95. int z = arr[x];
  96. arr[x] = arr[y];
  97. arr[y] = z;
  98. }
  99.  
  100. public int kthLargest(int kth){
  101. buildHeap();
  102. hpSize = size() - 1;
  103. for(int i=hpSize; i >= size()-kth; i--){
  104. swap(0, hpSize);
  105. hpSize--;
  106. heapify(0);
  107. }
  108. return arr[arr.length - kth];
  109. }
  110.  
  111. public void heapify(int j){
  112. int biggest = j;
  113. int right = j*2 + 1;
  114. int left = j*2;
  115.  
  116.  
  117. if(right <= hpSize && arr[right] > arr[biggest]){
  118. biggest = right;
  119. }
  120. if(left <= hpSize && arr[left] > arr[j]){
  121. biggest = left;
  122. }
  123.  
  124. if(biggest != j){
  125. swap(j, biggest);
  126. heapify(biggest);
  127. }
  128. }
  129. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement