Sorting 有没有办法优化这个Mergesort实现?

Sorting 有没有办法优化这个Mergesort实现?,sorting,Sorting,我为任何非常规的写作模式或任何其他明显的错误提前道歉。任何建议或提示将不胜感激 public class MergeSort { private static final int INSERTION_THRESHOLD = 8; public static void mergeSort(int[] x) { mergeSort(x, 0, x.length); } private static void mergeSort(int[] x, in

我为任何非常规的写作模式或任何其他明显的错误提前道歉。任何建议或提示将不胜感激

public class MergeSort {
    private static final int INSERTION_THRESHOLD = 8;

    public static void mergeSort(int[] x) {
        mergeSort(x, 0, x.length);
    }
    private static void mergeSort(int[] x, int start, int end) {
        int length=end-start;

        if(length<INSERTION_THRESHOLD) {
            for (int i=start; i<end; i++)
                for (int j=i; j>start && x[j-1]>x[j]; j--)
                    swap(x, j, j-1);
            return;
        }

        int mid=(start+end)>>>1;

        mergeSort(x, 0, mid);
        mergeSort(x, mid, end);

        int[] space=Arrays.copyOfRange(x, 0, mid);
        int i=0, j=mid, k=0;
        while(i<mid&&j<end)
            x[k++]=(x[j]<space[i])?x[j++]:space[i++];
        while(i<mid) 
            x[k++]=space[i++];      
    }
    private static void swap(int[] x, int n, int m) {
        int temp = x[n];
        x[n] = x[m];
        x[m] = temp;
    }
我在这里寻找的是任何建议或想法,可以使这成为一个更好的实现。我说得对吗,还是这里有一些非常搞笑的混乱?代码中是否有不必要的点?是否可以添加一些东西,使其运行更快速/平稳/更符合良好的合并排序要求?

您可以查看不同语言中的不同合并排序实现,并找到适合您的最佳解决方案,也许可以改进现有代码。以下是该网站的PHP实现示例:

function mergesort($arr){
    if(count($arr) == 1 ) return $arr;
    $mid = count($arr) / 2;
    $left = array_slice($arr, 0, $mid);
    $right = array_slice($arr, $mid);
    $left = mergesort($left);
    $right = mergesort($right);
    return merge($left, $right);
}

function merge($left, $right){
    $res = array();
    while (count($left) > 0 && count($right) > 0){
        if($left[0] > $right[0]){
            $res[] = $right[0];
            $right = array_slice($right , 1);
        }else{
            $res[] = $left[0];
            $left = array_slice($left, 1);
        }
    }
    while (count($left) > 0){
        $res[] = $left[0];
        $left = array_slice($left, 1);
    }
    while (count($right) > 0){
        $res[] = $right[0];
        $right = array_slice($right, 1);
    }
    return $res;
}

$arr = array( 1, 5, 2, 7, 3, 9, 4, 6, 8);
$arr = mergesort($arr);
echo implode(',',$arr);
希望这会有帮助。以下是网站:

function mergesort($arr){
    if(count($arr) == 1 ) return $arr;
    $mid = count($arr) / 2;
    $left = array_slice($arr, 0, $mid);
    $right = array_slice($arr, $mid);
    $left = mergesort($left);
    $right = mergesort($right);
    return merge($left, $right);
}

function merge($left, $right){
    $res = array();
    while (count($left) > 0 && count($right) > 0){
        if($left[0] > $right[0]){
            $res[] = $right[0];
            $right = array_slice($right , 1);
        }else{
            $res[] = $left[0];
            $left = array_slice($left, 1);
        }
    }
    while (count($left) > 0){
        $res[] = $left[0];
        $left = array_slice($left, 1);
    }
    while (count($right) > 0){
        $res[] = $right[0];
        $right = array_slice($right, 1);
    }
    return $res;
}

$arr = array( 1, 5, 2, 7, 3, 9, 4, 6, 8);
$arr = mergesort($arr);
echo implode(',',$arr);