Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package course.java.algorithms.sorting;
- import java.util.StringJoiner;
- class MyIntMergeSort implements Comparable<MyIntMergeSort> {
- int n;
- int val;
- public MyIntMergeSort(int n, int val) {
- this.n = n;
- this.val = val;
- }
- @Override
- public int compareTo(MyIntMergeSort other) {
- return Integer.compare(this.n, other.n);
- }
- @Override
- public String toString() {
- return new StringJoiner(", ", MyInt.class.getSimpleName() + "[", "]")
- .add("" + n)
- .add("" + val)
- .toString();
- }
- }
- public class MergeSort {
- public static void main(String[] args) {
- int[] a = {34, 4565, 4, 345, 34, 67, 4, 56, 345, 73, 986, 53, 12, 7, 85};
- MyIntMergeSort[] myIntMergeSorts = new MyIntMergeSort[a.length];
- for (int i = 0; i < a.length; i++) {
- myIntMergeSorts[i] = new MyIntMergeSort(a[i], i);
- }
- //insertionSort(myInts);
- /*bubbleSort(myInts);
- System.out.println(Arrays.toString(myInts));*/
- mergeSort(myIntMergeSorts);
- for (MyIntMergeSort element : myIntMergeSorts){
- System.out.println(element);
- }
- }
- private static void mergeSort(MyIntMergeSort[] myIntMergeSorts) {
- int inputLength = myIntMergeSorts.length;
- if (inputLength < 2) {
- return;
- }
- int midIndex = inputLength / 2;
- MyIntMergeSort[] leftHalf = new MyIntMergeSort[midIndex];
- MyIntMergeSort[] rightHalf = new MyIntMergeSort[inputLength - midIndex];
- for (int i = 0; i < midIndex; i++) {
- leftHalf[i] = myIntMergeSorts[i];
- }
- for (int i = midIndex; i < inputLength; i++) {
- rightHalf[i - midIndex] = myIntMergeSorts[i];
- }
- mergeSort(leftHalf);
- mergeSort(rightHalf);
- finalMerge(myIntMergeSorts, leftHalf, rightHalf);
- }
- private static void finalMerge(MyIntMergeSort[] myIntMergeSorts, MyIntMergeSort[] leftHalf, MyIntMergeSort[] rightHalf) {
- int leftLength = leftHalf.length;
- int rightLength = rightHalf.length;
- int i = 0;
- int j = 0;
- int k = 0;
- while (i < leftLength && j < rightLength) {
- if (leftHalf[i].compareTo(rightHalf[j]) <= 0) {
- myIntMergeSorts[k] = leftHalf[i];
- i++;
- }else {
- myIntMergeSorts[k] = rightHalf[j];
- j++;
- }
- k++;
- }
- while (i < leftLength){
- myIntMergeSorts[k] = leftHalf[i];
- i++;
- k++;
- }
- while (j < rightLength){
- myIntMergeSorts[k] = rightHalf[j];
- j++;
- k++;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment