mergeSort простой вывод неуместен - PullRequest
1 голос
/ 13 июля 2020

Я использовал этот метод в inte rnet, но когда я применяю его к своим тестовым примерам, я получаю неправильные значения. Я использовал этот метод в inte rnet, но когда я применяю его к своим тестовым примерам, я получаю неправильные значения. Я пытался отредактировать его, но в итоге получил этот код

public static void merge(int[] array, int left, int middle, int right) {
        int n1 = middle - left + 1;
        int n2 = right - middle;

        int Left_part_arra[] = new int[n1];
        int Right_part_arra[] = new int[n2];

        for (int i = 0; i < n1; ++i)
            Left_part_arra[i] = array[left + i];

        for (int j = 0; j < n2; ++j)
            Right_part_arra[j] = array[middle + 1 + j];

        int i = 0, j = 0;

        int k = left;

        while (i < n1 && j < n2) {
            if (Left_part_arra[i] <= Right_part_arra[j]) {
                array[k] = Left_part_arra[i];
                i++;
            } else {
                array[k] = Right_part_arra[j];
                j++;
            }
            k++;
        }

        while (i < n1) {
            array[k] = Left_part_arra[i];
            i++;
            k++;
        }

        while (j < n2) {
            array[k] = Right_part_arra[j];
            j++;
            k++;
        }
    }

1 Ответ

0 голосов
/ 13 июля 2020

Я думаю, что ваш алгоритм правильный, но вы могли сделать что-то не так при передаче аргументов

    void sort(int arr[], int left, int right) 
    { 
        if (left < right) { 
            
            int m = (left + right) / 2; 
            sort(arr, left, m); 
            sort(arr, m + 1, right);            
            merge(arr, l, m, r); 
        } 
    } 

    static void printArray(int arr[]) 
    { 
        int n = arr.length; 
        for (int i = 0; i < n; ++i) 
            System.out.print(arr[i] + " "); 
        System.out.println(); 
    } 

    public static void main(String args[]) 
    { 
        int arr[] = { 814, 137, 645, 135, 486, 981, 329, 472, 796, 233, 538, 836, 729, 739, 396, 556, 495, 375, 417, 772, 856, 485, 407, 100, 781, 209}; 

        System.out.println("Given Array"); 
        printArray(arr); 

        MergeSort ob = new MergeSort(); 
        ob.sort(arr, 0, arr.length - 1); 

        System.out.println("\nSorted array"); 
        printArray(arr); 
    } 
} 

Этот код + ваш код сортировки слиянием работал отлично. Так что любезно проверяйте сравнение аргументов при вызове функций sort () и mergesort () , и тогда вам будет хорошо go. Надеюсь, это поможет;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...