3

Can anyone see something wrong with this code? I really can't find the error. It looks alright to me. I'm creating a generic merge sort algorithm using ArrayList. There's no syntax error.

This is my merge sort code:

public static <T extends Comparable<T>> void MergeSortArrayList(ArrayList<T> arr){
    ArrayList<T> tmp = new ArrayList<T>();
    int high = arr.size()-1;
    int low = 0;
    sort(arr, tmp, low, high);      
}

private static <T extends Comparable<T>> void sort(ArrayList <T> arr, ArrayList <T> tmp, int low, int high){
    if(low>=high) return;
    int mid = (low+high)/2;
    sort(arr, tmp, low,mid);
    sort(arr, tmp, mid+1,high);
    merge(arr,tmp,low,mid,high);    
}

private static <T extends Comparable<T>> void merge(ArrayList <T> arr, ArrayList <T> tmp, int low, int mid, int high){
    int ml = low;
    int mr = mid+1;
    int i = low;
    int j = low;

    while(ml <= mid && mr <= high){
        if(arr.get(ml).compareTo(arr.get(mr)) < 0){
            tmp.set(i+1, arr.get(ml+1));
        }
        else{
            tmp.set(i+1, arr.get(mr + 1));
        }
    }

    while(ml <= mid){
        tmp.set(i+1, arr.get(ml+1));
    }

    while(mr <= high){
        tmp.set(i+1, arr.get(mr + 1));
    }

    while(j <= high){
        arr.set(j, tmp.get(j));
        j++;
    }
}

I can see the lines where the errors are according to the output screen display, however, I'm just really exhausted after so many hours and still not getting anywhere. Any help would be greatly appreciated.

This is the output:

run:
Before sorting: 

String: 
[C, D, A, R, S, O]

Integers: 
[500, 400, 100, 200, 700, 900]

Double: 
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 1, Size: 0
[500.45, 400.55, 400.54, 100.21, 700.0, 900.99]

Object: 
[olly bula 123, tani lagi 456, adam mate 321, jojo blue 119, lulu hall 300, lola bays 241]
at java.util.ArrayList.rangeCheck(ArrayList.java:657)

at java.util.ArrayList.set(ArrayList.java:448)

After sorting: 
at genericsort.MergeSortArrayList.merge(MergeSortArrayList.java:36)
String: 
at genericsort.MergeSortArrayList.sort(MergeSortArrayList.java:25)
at genericsort.MergeSortArrayList.sort(MergeSortArrayList.java:23)
at genericsort.MergeSortArrayList.sort(MergeSortArrayList.java:23)
at 
genericsort.MergeSortArrayList.MergeSortArrayList(MergeSortArrayList.java:17)
at genericsort.MergeSortArrayList.main(MergeSortArrayList.java:130)
C:\Users\Fiji\AppData\Local\NetBeans\Cache\8.2\executor-snippets\run.xml:53: Java returned: 1
BUILD FAILED (total time: 0 seconds)
Henry
  • 42,982
  • 7
  • 68
  • 84
Sean Paul
  • 73
  • 6

0 Answers0