C++ 使合并排序与作业的伪代码几乎相同

C++ 使合并排序与作业的伪代码几乎相同,c++,arrays,vector,indexing,mergesort,C++,Arrays,Vector,Indexing,Mergesort,我一直在做一个合并排序,到目前为止,我认为除了需要比较左右数组的部分外,其他都可以。救命啊!(这是家庭作业,因此它必须与以下伪代码几乎相同: /*MERGESORT(A, p, r)] if p < r q = (p+r)/2 MERGESORT(A,p,q) MERGESORT(A,q + 1, r) MERGE(A,p,q,r) MERGE(A,p,q,r) n1 = q - p + 1 n2 =

我一直在做一个合并排序,到目前为止,我认为除了需要比较左右数组的部分外,其他都可以。救命啊!(这是家庭作业,因此它必须与以下伪代码几乎相同:

/*MERGESORT(A, p, r)]
    if p < r
        q = (p+r)/2
        MERGESORT(A,p,q)
        MERGESORT(A,q + 1, r)
        MERGE(A,p,q,r)

MERGE(A,p,q,r)
    n1 = q - p + 1
    n2 = r - q
    let L[1...n1 + 1] and R[1...n2 + 1] be new arrays
    for i = 1 to n1
        L[i] = A[p + i - 1]
    for j = 1 to n2
        R[j] = A[q + j]
    L[n1 + 1] = INFINITY
    R[n2 + 1] = INFINITY
    i = 1
    j = 1
    for k = p to r
        if L[i] <= R[j]
            A[k] = L[i]
            i = i + 1
        else
            A[k] = R[j]
            j = j + 1*/
输出:::

Vina, California, 237
Santa Fe, New Mexico, 68642

Program received signal SIGSEGV, Segmentation fault.
0x00445cf7 in std::basic_ostream<char, std::char_traits<char> >& std::operator<< <char, std::char_traits<char>, std::allocator<char> >(std::basic_ostream<char, std::char_traits<char> >&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ()
    at /usr/lib/gcc/i686-pc-cygwin/3.4.4/include/c++/iostream:77
77        static ios_base::Init __ioinit;
来自以下内容的输出:::

Program received signal SIGSEGV, Segmentation fault.
0x004031ae in CensusData::MERGE (this=0x28aa40, type=0, p=0, q=2, r=5)
    at CensusDataSorts.cpp:105
105                 if(L[i]->population < R[j]->population)
程序接收信号SIGSEGV,分段故障。
CensusData::MERGE中的0x004031ae(this=0x28aa40,type=0,p=0,q=2,r=5)
在CensusDataSorts.cpp:105
105如果(L[i]>总体总体)

这些语句错误(超出数组访问范围)

我想你可能是说

   L[n1] = NULL;
   R[n2] = NULL;
因为在伪代码数组中,从1开始,但在代码数组中,从0开始。我认为这种差异将是大多数问题的原因

另一个问题是,使用NULL表示伪代码调用的无穷大,但在进行比较时,不会检查NULL

所以


我这样做了,现在输入示例2输出::2371293682,然后是seg faults。关于如何在if和if-else语句中实现它的任何指针,我已经盯着thsi代码好几个小时了,真的很难思考。我将其添加到if中,并将if-else改为else,现在没有任何输出,它在她身上进行了seg faultse:程序接收到信号SIGSEGV,分段错误。CensusData::MERGE中的0x0040304e(this=0x28aa40,type=0,p=0,q=1,r=2)在CensusDataSorts.cpp:87我可以删除couts吗?这是在我添加了if和if-else之后发生的事情:Vina,California,237程序接收到信号SIGSEGV,分割错误。在CensusData::print中0x00402935(this=0x28aa40)在CensusData.cpp:88 std::cout city注意:我不允许更改它所处的seg错误文件
Vina, California, 237
San Francisco, California, 812826
Santa Fe, New Mexico, 68642
Roseville, California, 1293
New York, New York, 283822
pieland, Conneticut, 283822
Program received signal SIGSEGV, Segmentation fault.
0x004031ae in CensusData::MERGE (this=0x28aa40, type=0, p=0, q=2, r=5)
    at CensusDataSorts.cpp:105
105                 if(L[i]->population < R[j]->population)
   L[n1 + 1] = NULL;
   R[n2 + 1] = NULL;
   L[n1] = NULL;
   R[n2] = NULL;
        if(L[i]->population < R[j]->population)
        if ((L[i] != NULL && R[j] != NULL && L[i]->population < R[j]->population) ||
            (L[i] == NULL && R[j] != NULL))
        else if ((L[i] != NULL && R[j] != NULL && L[i]->population > R[j]->population) ||
            (L[i] != NULL && R[j] == NULL))