Debug merge sort and validate comparison counters
Here's some suggestions on what you can do differently to get a better result (both performance counters and code style).

The MergeSortRun class breaks many rules for naming conventions in Java.... well, actually the class name is OK (MergeSortRun), but the method (also called MergeSortRun) is very confusing, because only the constructor (which you don't have coded up) is supposed to have that name.

Rename the MergeSortRun method to something simple like 'sort'.

Additionally, the variables 'counterOne' and 'displaylist' are not necessary... if it were me, I would have 'counterOne' returned from the sort method, and the displaylist variable is completely dead anyway. Doing this will allow you to make the sort method static, of the form:

public static final int sort(int array[], int lo, int n) {...}


The 'int' return value is the number of comparisons you want to count.

Now, you have to question what your counter should be. There are two key items that tend to impact performance of sorts. The one is comparisons, and the other is data-moves (or swaps).

Since your input data is an int[] array, the comparisons between values are just as expensive as any other int based comparison. Thus, I think you should potentially be counting much more. The easiest way to do it is to show you what I think it should look like:

public int sort(int array[], int lo, int n) {
    int low = lo;
    int high = n;
    int compares = 1;
    if (low &gt;= high) {
        return compares;  // NOTE - 1 comparison (low &gt;= high)
    }
    int middle = (low + high) / 2; // technically should be: (low + high) &gt;&gt;&gt; 1
    compares += sort(array, low, middle);
    compares += sort(array, middle + 1, high);
    int end_low = middle;
    int start_high = middle + 1;
    while ((lo &lt;= end_low) &amp;&amp; (start_high &lt;= high)) {
        compares += 3; // two in 'while' loop above, and one in 'if' below.
        if (array[low] &lt; array[start_high]) {
            low++;
        } else {
            int Temp = array[start_high];
            compares++; // entry in to the for loop
            for (int k = start_high - 1; k &gt;= low; k--) {
                array[k + 1] = array[k];
                compares++; // exit from the for loop
            }
            array[low] = Temp;
            low++;
            end_low++;
            start_high++;
        }
    }
    return compares;
}