[英]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.