簡體   English   中英

合並排序分段錯誤c ++

[英]merge sort segmentation fault c++

我正在嘗試為我的算法分析類實施合並排序,並且每次運行它時,都會出現分段錯誤。 我認為問題是當我在merge_sort函數中分割向量時,卻找不到問題。 幫助將是非常感激的家伙。

template <typename T>
std::vector<int> merge(std::vector<T>& A,std::vector<T>& B)
{
   int a_size = A.size();
   int b_size = B.size();
   std::vector<int> C(a_size+b_size,0);
   //int *c = new int[b_size+a_size];
   int i =0,j =0,k=0;
   while(i < a_size && j < b_size)
   {
        if(A[i]<B[j])
        {
            C[k] = A[i];
            k++;
            i++;
        }   
        else
        {
            C[k] = B[j];
            k++;
            j++;
            if(i!=a_size)
            {
                for(;i<a_size;i++,k++)
                {
                    //copy rest of a to c
                    C[k] = A[i];
                }
            }
            if(j != b_size)
            {
                for(;j<b_size;k++,j++)
                {
                    //copy the rest of b to c
                    C[k] = B[j];
                }
            }   
        }
    }
    return C;
}
// Merge sort implementation
template <typename T>
void merge_sort(std::vector<T>& vector)
{
    // TODO implement merge sort
    int vector_size = vector.size();
    int big_vector_index = 0;
    int half_size = (int)vector_size/2;
    int remainder = vector_size%2;
    std::vector<int> left(half_size,0);
    std::vector<int> right(half_size+remainder,0);
    for(int l = 0;big_vector_index<half_size;l++,big_vector_index++)
    {
        left[l] = vector[big_vector_index];
    }

    for(int m = 0;big_vector_index<vector_size;m++,big_vector_index++)
    {
        right[m] = vector[big_vector_index];
    }
    big_vector_index = 0;
    merge_sort(left);
    merge_sort(right);
    vector = merge(left,right);

}

我看了看您的代碼,大部分代碼在我的測試中都是正確的。 我不想為您做課程,但是也許有一些正確方向的提示會有所幫助。

對於您關於段錯誤的原始問題,PaulMcKenzie,Jim Lewis和merge_sort()是正確的, merge_sort()需要一個基本條件(基本情況)來檢查是否應繼續遞歸,因此遞歸不會永遠持續下去,並且/或者直到您的計算機內存不足為止(這就是您的情況)。 通常,任何遞歸函數都應具有基本情況。

另外,您還應該查看合並功能。 它具有正確合並功能的所有部分,但其中某些部分的運行時間比您希望的要早/經常。 由於要上課,我不想付出太多,但是如果您解決了段錯誤並仍然得到奇怪的答案,請查看一下。

暫無
暫無

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

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