簡體   English   中英

Mergesort 在 output 中給出半隨機未排序的數字

[英]Mergesort is giving semi-random unsorted numbers in output

我正在為 class 實現排序算法,mergesort 是唯一讓我難過的算法。 我遇到了段錯誤和其他問題,但是一旦我“解決”了這些問題,我現在就卡在數組中,給出重復值,memory 地址,並且沒有排序。 代碼如下:

void merge(int* array, int first, int mid, int last){
    int first1 = first;
    int tempArr[last + 1];
    int first2 = mid + 1; 
    int last1 = mid; 
    int last2 = last;
    int index = first1; 

    for(; (first1 <= last1) && (first2 <= last2); ++index){
        if(array[first1] < array[first2]){
            tempArr[index] = array[first1];
            ++first1;
        }else {
            tempArr[index] = array[first2];
            ++first2;
        }
    }

    for(; first1 <= last1; ++first1, ++index){
        tempArr[index] = array[first1];
    }
    
    for(; first2 <= last2; ++first2, ++index){
        tempArr[index] = array[first2];
    }

//assigns sorted values to original array
    for(index = 0; index <= last; ++index){
        array[index] = tempArr[index];
    }
}


void mergeSort(int *array, int first, int last){
    int mid = (first + last) / 2;
    if (first < last){
        mergeSort(array, first, mid);
        mergeSort(array, mid+1, last);

        merge(array, first, mid, last);
    }
}

輸入:

array[] = {99, 23, 87, 67, 34, 12, 9, 44, 67, 73, 21, 71, 65, 48, 22, 89, 5, 11, 55, 31, 61, 29, 19, 49, 51};

output:

19 23 22 22 49 51 51 61 23 22 61 23 22 18894848128 32767 23 1889484128 32767 23 19 23 22 49 51

任何幫助表示贊賞。 ps 這是我第一次發帖,對於格式上的任何錯誤深表歉意。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM