Advertisement
Guest User

Untitled

a guest
Nov 19th, 2019
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.29 KB | None | 0 0
  1. import java.util.Scanner;
  2.  
  3. public class Main {
  4. public static void main(String[] args) {
  5. Scanner sc = new Scanner(System.in);
  6.  
  7. // Read in k, which represents the maximum
  8. // distance between a number's current position
  9. // and sorted position
  10. int k = Integer.parseInt(sc.nextLine());
  11.  
  12. // Read in the list of numbers
  13. int[] numbers;
  14. String input = sc.nextLine();
  15. if (input.equals("")) {
  16. numbers = new int[0];
  17. } else {
  18. String[] numberStrings = input.split(" ");
  19. numbers = new int[numberStrings.length];
  20. for (int i = 0; i < numberStrings.length; i++) {
  21. numbers[i] = Integer.parseInt(numberStrings[i]);
  22. }
  23. }
  24.  
  25. // Sort the list
  26. sort(numbers, k);
  27.  
  28. // Print the sorted list
  29. StringBuilder resultSb = new StringBuilder();
  30. for (int i = 0; i < numbers.length; i++) {
  31. resultSb.append(new Integer(numbers[i]).toString());
  32. if (i < numbers.length - 1) {
  33. resultSb.append(" ");
  34. }
  35. }
  36. System.out.println(resultSb.toString());
  37. }
  38.  
  39. // Merges two subarrays of arr[].
  40. // First subarray is arr[l..m]
  41. // Second subarray is arr[m+1..r]
  42. public static void merge(int arr[], int l, int m, int r)
  43. {
  44. // Find sizes of two subarrays to be merged
  45. int n1 = m - l + 1;
  46. int n2 = r - m;
  47.  
  48. /* Create temp arrays */
  49. int L[] = new int [n1];
  50. int R[] = new int [n2];
  51.  
  52. /*Copy data to temp arrays*/
  53. for (int i=0; i<n1; ++i)
  54. L[i] = arr[l + i];
  55. for (int j=0; j<n2; ++j)
  56. R[j] = arr[m + 1+ j];
  57.  
  58.  
  59. /* Merge the temp arrays */
  60.  
  61. // Initial indexes of first and second subarrays
  62. int i = 0, j = 0;
  63.  
  64. // Initial index of merged subarry array
  65. int k = l;
  66. while (i < n1 && j < n2)
  67. {
  68. if (L[i] <= R[j])
  69. {
  70. arr[k] = L[i];
  71. i++;
  72. }
  73. else
  74. {
  75. arr[k] = R[j];
  76. j++;
  77. }
  78. k++;
  79. }
  80.  
  81. /* Copy remaining elements of L[] if any */
  82. while (i < n1)
  83. {
  84. arr[k] = L[i];
  85. i++;
  86. k++;
  87. }
  88.  
  89. /* Copy remaining elements of R[] if any */
  90. while (j < n2)
  91. {
  92. arr[k] = R[j];
  93. j++;
  94. k++;
  95. }
  96. }
  97.  
  98. // Main function that sorts arr[l..r] using
  99. // merge()
  100. // r inclusive
  101. public static void mergesort(int arr[], int l, int r)
  102. {
  103. if (l < r)
  104. {
  105. // Find the middle point
  106. int m = (l+r)/2;
  107.  
  108. // Sort first and second halves
  109. mergesort(arr, l, m);
  110. mergesort(arr , m+1, r);
  111.  
  112. // Merge the sorted halves
  113. merge(arr, l, m, r);
  114. }
  115. }
  116.  
  117. static void printArray(int arr[])
  118. {
  119. System.out.println("Current Array State\n---------------------\n");
  120. int n = arr.length;
  121. for (int i=0; i<n; ++i)
  122. System.out.print(arr[i] + " ");
  123. System.out.println();
  124. }
  125.  
  126. public static void sort(int[] numbers, int k) {
  127. // TODO implement this function
  128. int start = 0;
  129. int len = numbers.length;
  130. if (len <= k) {
  131. mergesort(numbers, start, len-1);
  132. return;
  133. }
  134. mergesort(numbers,start,k-1);
  135. printArray(numbers);
  136. while(start<len) {
  137. System.out.println(start+" "+k);
  138. if( (start+k)>=len ) break;
  139. if( (start+2*k)>=len ) {
  140. mergesort(numbers, start+k, len-1);
  141. merge(numbers, start, start+k-1, len-1);
  142. break;
  143. }
  144.  
  145. mergesort(numbers, start+k, start+2*k);
  146. merge(numbers, start, start+k-1, start+2*k);
  147. printArray(numbers);
  148. start += k+1;
  149.  
  150. }
  151.  
  152. printArray(numbers);
  153. //throw new UnsupportedOperationException();
  154. }
  155. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement