Merge Sort

public class MergeSort {
    public int[] mergerSort(int[] data){
        if(data == null){
            return null;
        }

        int len = data.length;
        if(len <= 1){
            return data;            
        }

        int left[] = new int[len/2];
        int right[] = new int[len - len/2];


    //left = Arrays.copyOfRange(data, 0, data.legnth / 2 - 1)
        //right = Arrays.copyOfRange(data, data.length / 2, data.length - 1);
        System.arraycopy(data, 0, left, 0, len/2);
        System.arraycopy(data, len/2, right, 0, len - len/2);


        left = mergerSort(left);
        right = mergerSort(right);

        return merge(left, right);

    }

    public int[] merge(int[] left, int[] right){
        int len = left.length + right.length;

        int[] ret = new int[len];

        int leftPoint = 0;
        int rightPoint = 0;

        int cur = 0;

        while(leftPoint < left.length && rightPoint < right.length){
            if(left[leftPoint] < right[rightPoint]){
                ret[cur++] = left[leftPoint++];
            }else {
                ret[cur++] = right[rightPoint++];
            }
        }

        if(leftPoint >= left.length){
            while (rightPoint < right.length){
                ret[cur++] = right[rightPoint++];
            }
        }else{
            while (leftPoint < left.length){
                ret[cur++] = left[leftPoint++];
            }            
        }
        return ret;

    }
}

results matching ""

    No results matching ""