繁体   English   中英

我无法让我的 MergeSort 实现运行

[英]I can't get my MergeSort implementation to run

我在让我的归并排序算法工作时遇到问题。 第一个问题是我的 arrays 没有被创建,因为我无法动态创建一个数组(它必须是一个常量值)。 我通过创建非常大的 arrays 跳过了这一点,但现在 output 仍然非常混乱。 任何帮助,将不胜感激。

#include <iostream>
#include <string>
#include <iomanip>
#include <cstdlib>
#include <time.h>
#include <fstream>

using namespace std;
void MergeSort(int[], int, int);
void Merge(int[], int, int, int);

int main()
{
    int A[] = {5,3,2,6,7,8,1,9};

    MergeSort(A, 0, 7);

    for (int i = 0; i < 7; i++) {
        cout << A[i] << " ";
    }
}


void Merge(int A[], int f, int m, int l) {
    int i, j, k;
    int n = l - m + 1;
    int temp[500];
    int lefttemp[9];
    int righttemp[9];

    k = 0;

    for (i = 0; i < m;  i++) {
        lefttemp[i] = A[i];
    }
    for (j = m + 1; j < l;  j++) {
        righttemp[k] = A[j];
    }
    for (int m = 0; m < 7; m++) {
        cout << "position" << lefttemp[m] << " booga";
    }
    for (int n = 0; n < 7; n++) {
        cout << righttemp[n] << " ";
    }
    i = 0;
    j = 0;
    k = 0;
    while (i < m && j < l) {

        if (lefttemp[i] < righttemp[j]) {
            temp[k] = lefttemp[i];
            k++;
            i++;
            cout << temp[k];
        }
        else {
            temp[k] = righttemp[j];
            k++;
            j++;
            cout << temp[k];
        }
    }
    if (i < m) {
        while (i < m) {
            temp[k] = lefttemp[i];
            i++;
            k++;
        }
        if (j < l) {
            while (j <= l) {
                temp[k] = righttemp[j];
                j++;
                k++;
            }

        }

    }

}
void MergeSort(int A[], int beginning, int end) {
    int midpoint;
    if (beginning>=end) {
        return;
    }
    else {
        int f = beginning;

        int l = end;
        cout << l << endl;
        midpoint = (beginning + end) / 2;
        MergeSort(A, f, midpoint);
        MergeSort(A, midpoint + 1, l);
        Merge(A, f, midpoint, l);


    }
}

编辑:刚刚想通了

#include <iostream>
#include <string>
#include <iomanip>
#include <cstdlib>
#include <time.h>
#include <fstream>

using namespace std;
void MergeSort(int[], int, int);
void Merge(int[], int, int, int);

int main()
{
    int A[] = {5,3,2,6,7,8,1,9};
    for (int i = 0; i < 8; i++) {
        cout << A[i] << " ";
    }
    cout<<endl;
    MergeSort(A, 0, 7);

    for (int i = 0; i < 8; i++) {
        cout << A[i] << " ";
    }
}


void Merge(int A[], int f, int m, int l) {
    int i, j, k, z;
    int n = l - m + 1;
    int* temp;
    int lengthtemp = l-f+1;
    temp = new int[lengthtemp];
    int* lefttemp;
    int* righttemp;
    righttemp = new int[l-m];
    lefttemp = new int[m-f+1];
    cout << "The length is " << lengthtemp << endl;
    k = 0;
    z = 0;

    for (i = f; i <= m;  i++) {
        lefttemp[z] = A[i];
        z++;
    }
    for (j = m+1 ; j <= l;  j++) {
        righttemp[k] = A[j];
        k++;
    }

    i = 0;
    j = 0;
    k = 0;
    int leftsize, rightsize;
    leftsize = m+1 - f;
    rightsize = l - m;
    while (i < leftsize && j < rightsize)
    {

        if (lefttemp[i] < righttemp[j])
        {
            temp[k] = lefttemp[i];
            i++;
            k++;
        }
        else 
        {
            temp[k] = righttemp[j];
            j++;
            k++;
        }
    }
    if (i < leftsize) {
        while (i < leftsize) {
            temp[k] = lefttemp[i];
            i++;
            k++;
        }
    }
        if (j < rightsize) {
            while (j < rightsize) {
                temp[k] = righttemp[j];
                j++;
                k++;
            }

        }
        int randomstart = 0;
        for (i = f; i <= l; i++) {
            A[i] = temp[randomstart];
            randomstart++;
        }
        delete[] temp;
        delete[] righttemp;
        delete[] lefttemp;



}
void MergeSort(int A[], int beginning, int end) {
    int midpoint;
    if (beginning>=end) {
        return;
    }
    else {
        int f = beginning;

        int l = end;

        midpoint = (beginning + end) / 2;
        MergeSort(A, f, midpoint);
        MergeSort(A, midpoint + 1, l);
        Merge(A, f, midpoint, l);


    }
}

这是代码的答案:

#include <iostream>
#include <string>
#include <iomanip>
#include <cstdlib>
#include <time.h>
#include <fstream>

using namespace std;
void MergeSort(int[], int, int);
void Merge(int[], int, int, int);

int main()
{
    int A[] = {5,3,2,6,7,8,1,9};
    for (int i = 0; i < 8; i++) {
        cout << A[i] << " ";
    }
    cout<<endl;
    MergeSort(A, 0, 7);

    for (int i = 0; i < 8; i++) {
        cout << A[i] << " ";
    }
}


void Merge(int A[], int f, int m, int l) {
    int i, j, k, z;
    int n = l - m + 1;
    int* temp;
    int lengthtemp = l-f+1;
    temp = new int[lengthtemp];
    int* lefttemp;
    int* righttemp;
    righttemp = new int[l-m];
    lefttemp = new int[m-f+1];
    cout << "The length is " << lengthtemp << endl;
    k = 0;
    z = 0;

    for (i = f; i <= m;  i++) {
        lefttemp[z] = A[i];
        z++;
    }
    for (j = m+1 ; j <= l;  j++) {
        righttemp[k] = A[j];
        k++;
    }

    i = 0;
    j = 0;
    k = 0;
    int leftsize, rightsize;
    leftsize = m+1 - f;
    rightsize = l - m;
    while (i < leftsize && j < rightsize)
    {

        if (lefttemp[i] < righttemp[j])
        {
            temp[k] = lefttemp[i];
            i++;
            k++;
        }
        else 
        {
            temp[k] = righttemp[j];
            j++;
            k++;
        }
    }
    if (i < leftsize) {
        while (i < leftsize) {
            temp[k] = lefttemp[i];
            i++;
            k++;
        }
    }
        if (j < rightsize) {
            while (j < rightsize) {
                temp[k] = righttemp[j];
                j++;
                k++;
            }

        }
        int randomstart = 0;
        for (i = f; i <= l; i++) {
            A[i] = temp[randomstart];
            randomstart++;
        }
        delete[] temp;
        delete[] righttemp;
        delete[] lefttemp;



}
void MergeSort(int A[], int beginning, int end) {
    int midpoint;
    if (beginning>=end) {
        return;
    }
    else {
        int f = beginning;

        int l = end;

        midpoint = (beginning + end) / 2;
        MergeSort(A, f, midpoint);
        MergeSort(A, midpoint + 1, l);
        Merge(A, f, midpoint, l);


    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM