Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 合并排序不正确_Java_Arrays_Sorting - Fatal编程技术网

Java 合并排序不正确

Java 合并排序不正确,java,arrays,sorting,Java,Arrays,Sorting,我尝试使用下面的代码在Java中实现合并排序。mergeSort()方法被认为是一种递归方法,可以重复地将数组划分为较小的部分,而merge()方法将数组中已排序的两个部分合并为一个已排序的部分 代码如下: class MergeSort{ public static void mergeSort(int[] array){ mergeSort(array, 0, array.length-1); } public static void mergeSor

我尝试使用下面的代码在Java中实现合并排序。
mergeSort()
方法被认为是一种递归方法,可以重复地将数组划分为较小的部分,而
merge()
方法将数组中已排序的两个部分合并为一个已排序的部分

代码如下:

class MergeSort{
    public static void mergeSort(int[] array){
        mergeSort(array, 0, array.length-1);
    }
    public static void mergeSort(int[] array, int start, int end){
        int mid = (start + end)/2;
        if (end > start) {
            mergeSort(array, start, mid);
            mergeSort(array, mid + 1, end);
            merge(array, start, end, mid + 1);
        }
    }
    public static void merge(int[] array, int start, int end, int  mid){
        int length = end - start + 1,length1 = mid- start, length2 = end - mid + 1, index1 = start, index2 = mid, sortedindex = 0;
        boolean cont = true;
        int[] sortedArray = new int[length];
        while (cont){
            if (array[index1] > array[index2]){
                sortedArray[sortedindex] = array[index2];
                index2++;
            } else{
                sortedArray[sortedindex] = array[index1];
                index1++;
            }
            sortedindex++;
            //reached the end of one array, dump the rest of the remaining array in the sorted array
            if (index1 >= length1){
                for (index2 = index2; index2 < length2; index2++){
                    sortedArray[sortedindex] = array[index2];
                    sortedindex++;
                }
                cont = false;
            } else if (index2 >= length2){
                for (index1 =index1; index1 < length1; index1++){
                    sortedArray[sortedindex] = array[index1];
                    sortedindex++;
                }
                cont = false;
            }
        }
        //copy the sorted array into the main array
        for (int i = 0; i <= length - 1; i++){
            array[start+i] = sortedArray[i];
        }
    }
}

public class Main {

    public static void main(String[] args) {
    // write your code here
        Scanner scanner = new Scanner(System.in);
        scanner.useDelimiter("\n");
        Random random = new Random();
        int length = scanner.nextInt();
        int[] array = new int[length];
        for (int i = 0; i < length;i++){
            array[i] = random.nextInt(5000);
            //System.out.println(array[i]);
        }
        MergeSort.mergeSort(array);
        for (int i: array){
            System.out.println(i);
        }
    }
}
类合并排序{
公共静态void合并排序(int[]数组){
合并排序(数组,0,数组。长度-1);
}
公共静态void mergeSort(int[]数组,int start,int end){
int mid=(开始+结束)/2;
如果(结束>开始){
合并排序(数组、开始、中间);
合并排序(数组,中间+1,结束);
合并(数组、开始、结束、中间+1);
}
}
公共静态无效合并(int[]数组、int开始、int结束、int中间){
int length=end-start+1,length1=mid-start,length2=end-mid+1,index1=start,index2=mid,sortedindex=0;
布尔控制=真;
int[]sortedArray=新int[长度];
while(续){
if(数组[index1]>数组[index2]){
sortedArray[sortedindex]=数组[index2];
index2++;
}否则{
sortedArray[sortedindex]=数组[index1];
index1++;
}
sortedindex++;
//到达一个数组的末尾时,将剩余数组的其余部分转储到已排序数组中
如果(index1>=长度1){
对于(index2=index2;index2=长度2){
对于(index1=index1;index1对于(int i=0;iwhile循环应提前关闭

public static void merge1(int[] array, int start, int end, int mid) {
    int length = end - start + 1;
    int[] sortedArray = new int[length];
    int index1 = start;
    int index2 = mid + 1;
    int sortedindex = 0;
    while (index1 <= mid && index2 <= end) {
        if (array[index1] < array[index2]) {
            sortedArray[sortedindex++] = array[index1++];
        } else {
            sortedArray[sortedindex++] = array[index2++];
        }
    }
        // reached the end of one array, dump the rest of the remaining array in the
        // sorted array
        while (index1 <= mid) {
            sortedArray[sortedindex++] = array[index1++];
        }

        while (index2 <= end) {
            sortedArray[sortedindex++] = array[index2++];
        }

    // copy the sorted array into the main array
    for (int i = 0; i <= length - 1; i++) {
    array[start + i] = sortedArray[i];
    }
}
publicstaticvoidmerge1(int[]数组,int开始,int结束,int中间){
整数长度=结束-开始+1;
int[]sortedArray=新int[长度];
int index1=开始;
int index2=mid+1;
int-sortedindex=0;

虽然(index1)您不必说初学者,但每个人都是调试阶段的初学者,如果您使用eclipse,您可能会看到这一点