Advertisement
Guest User

Merge Sort

a guest
Mar 27th, 2015
253
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.58 KB | None | 0 0
  1. public static <T> void mergesort(T[] arr, Comparator<T> comparator) {
  2. T[] temp = mergeSorter(arr, comparator);
  3. for (int i = 0; i < arr.length; i++) {
  4. arr[i] = temp[i];
  5. }
  6. }
  7.  
  8. private static <T> T[] mergeSorter(T[] arr, Comparator<T> comparator) {
  9. if (arr.length > 1) {
  10. T[] array1 = (T[]) new Object[arr.length / 2];
  11. int array2Length = arr.length - arr.length / 2;
  12. T[] array2 = (T[]) new Object[array2Length];
  13.  
  14. for (int i = 0; i < array1.length; i++) {
  15. array1[i] = arr[i];
  16. }
  17. for (int j = 0; j < array2Length; j++) {
  18. array2[j] = arr[j + arr.length / 2];
  19. }
  20. arr = merge(mergeSorter(array1, comparator), mergeSorter(array2, comparator), comparator);
  21. }
  22. return arr;
  23.  
  24. }
  25.  
  26. private static <T> T[] merge(T[] array1, T[] array2, Comparator<T> comparator) {
  27. T[] arr = (T[]) new Object[array1.length + array2.length];
  28. int arr1Size = array1.length;
  29. int arr2Size = array2.length;
  30. int arr1Index = 0;
  31. int arr2Index = 0;
  32. while (arr1Index + arr2Index < arr.length) {
  33. if ((arr2Index == arr2Size) || (arr1Index < arr1Size && (comparator.compare(array1[arr1Index], array2[arr2Index]) < 0))) {
  34. arr[arr1Index + arr2Index] = array1[arr1Index++];
  35. } else {
  36. arr[arr1Index + arr2Index] = array2[arr2Index++];
  37. }
  38. }
  39. return arr;
  40. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement