Guest User

Untitled

a guest
Mar 20th, 2018
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.97 KB | None | 0 0
  1. package edu.cmich.cps181;
  2.  
  3. import java.util.ArrayList;
  4.  
  5. public class MergeSort {
  6. public static <T> void merge(ArrayList<T> randomInputs, int i, int j, int k) {
  7. int mergedSize = k - i + 1; // Size of merged partition
  8. int mergedNumbers[] = new int[mergedSize]; // Temporary array for merged numbers
  9. int mergePos = 0; // Position to insert merged number
  10. int leftPos = 0; // Position of elements in left partition
  11. int rightPos = 0; // Position of elements in right partition
  12.  
  13. leftPos = i; // Initialize left partition position
  14. rightPos = j + 1; // Initialize right partition position
  15.  
  16. // Add smallest element from left or right partition to merged numbers
  17. while (leftPos <= j && rightPos <= k) {
  18. if ((int) randomInputs.get(leftPos) < (int) randomInputs.get(rightPos)) {
  19. mergedNumbers[mergePos] = (int) randomInputs.get(leftPos);
  20. ++leftPos;
  21. } else {
  22. mergedNumbers[mergePos] = (int) randomInputs.get(rightPos);
  23. ++rightPos;
  24. }
  25. ++mergePos;
  26. }
  27.  
  28. // If left partition is not empty, add remaining elements to merged numbers
  29. while (leftPos <= j) {
  30. mergedNumbers[mergePos] = (int) randomInputs.get(leftPos);
  31. ++leftPos;
  32. ++mergePos;
  33. }
  34.  
  35. // If right partition is not empty, add remaining elements to merged numbers
  36. while (rightPos <= k) {
  37. mergedNumbers[mergePos] = (int) randomInputs.get(rightPos);
  38. ++rightPos;
  39. ++mergePos;
  40. }
  41.  
  42. // Copy merge number back to numbers
  43. for (mergePos = 0; mergePos < mergedSize; ++mergePos) {
  44. randomInputs.set(i + mergePos, mergedNumbers[mergePos]);
  45. }
  46. }
  47.  
  48. public static <T> void mergesort(ArrayList<T> randomInputs, int i, int k) {//i = 0 and k = length
  49. int j = 0;
  50.  
  51. if (i < k) {
  52. j = (i + k) / 2; // Find the midpoint in the partition
  53.  
  54. // Recursively sort left and right partitions
  55. mergesort(randomInputs, i, j);
  56. mergesort(randomInputs, j + 1, k);
  57.  
  58. // Merge left and right partition in sorted order
  59. merge(randomInputs, i, j, k);
  60. }
  61. }
  62.  
  63. }
Advertisement
Add Comment
Please, Sign In to add comment