Sort Comparisons Counter

前端 未结 1 1821
情歌与酒
情歌与酒 2021-01-17 06:23

I have this code that sorts an array that is filled with random numbers and counts the number comparisons that it takes to complete the sort. I\'m using the sort methods sel

相关标签:
1条回答
  • 2021-01-17 07:12

    When (or just prior to) the following lines are executed:

    • if (intArray[i] > intArray[largestIndex]){
    • if(intArray[j-1] > intArray[j]) {
    • if(first[iFirst] < second[iSecond]) {

    Your mergeSort method uses recursion. As such, it needs to take a comparisons parameter, and pass that down to each subsequent method call and receive the resulting value back again.

    public static int mergeSort(int[] intArray, int comparisons) {
    
        if(intArray.length >= 2) {
    
            int mid = intArray.length / 2;
            //Create 2 arrays to store half of the data in each
            int[] first = new int[mid];     //holds first half of array
            int[] second = new int[intArray.length - mid];  //holds second half of array
    
            for(int i = 0; i < first.length; i++) { 
                first[i] = intArray[i];     
            }
    
            for(int i = 0; i < second.length; i++) {
                second[i] = intArray[mid+i];
            }
    
            comparisons = mergeSort(first, comparisons);
            comparisons = mergeSort(second, comparisons);
            comparisons = merge(first, second, intArray, comparisons);     //Merge all together
    
        }
    
        return comparisons;
    }
    
    //merging first and second halves of mergeSort array
    public static int merge(int[] first, int[] second, int[] intArray, int comparisons) {
    
        int iFirst = 0;
        int iSecond = 0;
        int i = 0; 
    
        //moving the smaller element into intArray
        while(iFirst < first.length && iSecond < second.length) {
    
            comparisons++;
    
            if(first[iFirst] < second[iSecond]) {
                intArray[i] = first[iFirst];
                iFirst++;
            }
    
            else {
                intArray[i] = second[iSecond];
                iSecond++;
            }
            i++;
        }
    
    
        //copying the remaining of first array
        while(iFirst < first.length) {
            intArray[i] = first[iFirst];
            iFirst++; i++; 
        }
    
        //copying the remaining of second array
        while(iSecond < second.length)
        {
            intArray[i] = second[iSecond];
            iSecond++; i++; 
        } 
    
        return comparisons;
    }
    
    0 讨论(0)
提交回复
热议问题