Home > Enterprise >  Mergesort Algorithm isn't working for large datasets
Mergesort Algorithm isn't working for large datasets

Time:10-07

I am working on a merge sorting algorithm and cannot find my error. The output is mostly sorted until the end where it lists several of the ints randomly:

1 2 3 4 5 6 7 8 9 10 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 84 85 86 87 88 89 90 91 92 93 95 96 97 98 99 100 30 13 14 83 94

    

    public static void main(String args[]) throws IOException {



        Scanner scan = new Scanner(System.in);
        System.out.println("Enter dataset size: ");
        int size = scan.nextInt();
        String file = ""   size   ".txt";
        
        scan.close();
        Scanner scanner = new Scanner(new File(file));
        
        
        

        // read numbers from text file into the array
        // set array size to the user input size
        // while loop reads text file until each int is read
        int array[] = new int[size];
        int i = 0;
        while(scanner.hasNext()) {
            array[i  ] = scanner.nextInt();
        }
        scanner.close();
        
        
        
        
        // create 4 copies of the array to test each in a separate algorithm
        int array1[] = new int[size];
        int array2[] = new int[size];
        int array3[] = new int[size];
        int array4[] = new int[size];
        for (int j = 0; j < array.length; j  ) {
            array1[j] = array[j];
            array2[j] = array[j];
            array3[j] = array[j];
            array4[j] = array[j];
        }
        
        

        
        // test bubble sort
        // this inputs the array and outputs time taken to compute
        bubbleSort(array1);
        

        // test selection sort
        // this inputs the array and outputs time taken to compute
        selectionSort(array2);


        
        
        //quickSort(array3, 0, array3[array3.length-1]);
        
        // test merge sorting algorithm

        mergeSort(array4, 0, array4[array4.length-1]);

        

        System.out.println();
        for (int k = 0; k<array4.length; k  ) {
            System.out.print(array4[k]   " ");
        }

        
        

    }

public static void mergeSort(int arr[], int start, int end) {
        if (start < end) {
            int mid = (start   end)/2;
            mergeSort(arr, start, mid);
            mergeSort(arr, mid 1, end);
            merge(arr, start, mid, end);
        }

    }
    
    
    private static void merge(int arr[], int start, int mid, int end) {
        int n1 = mid - start   1;
        int n2 = end - mid;
        int left[] = new int[n1];
        int right[] = new int[n2];
        for (int i = 0; i <n1; i  ) {
            left[i] = arr[start i];
        }
        for (int j = 0; j < n2; j  ) {
            right[j] = arr[mid   1   j];
        }
        
        int i = 0; 
        int j = 0; 
        int k = start;
        
        while (i < n1 && j < n2) {
            if (left[i] <= right[j]) {
                arr[k] = left[i];
                i  ;
            } else {
                arr[k] = right[j];
                j  ;
            }
            k  ;
        }
        
        while (i < n1) {
            arr[k] = left[i];
            i  ;
            k  ;
        }
        
        while (j < n2) {
            arr[k] = right[j];
            j  ;
            k  ;
        }

    }

CodePudding user response:

The problem is in how you call your mergeSort:

// test merge sorting algorithm
mergeSort(array4, 0, array4[array4.length-1]);

Try replacing array4[array4.length-1] with just array4.length-1.

  • Related