我正在研究合并排序算法,我没有得到我正在寻找的输出。我正在输入一个包含20个不同数字的文件。文件中的数字通过程序运行,但它返回-842150451,-117594513和-2147483648。大多是-842150451。我确实尝试将merges(A, 0, n);
更改为merges(A, size of array A, n);
,但这只是给出了数字而没有对它们进行排序。我也尝试将p设为最大值,但与p的数组大小相同。我可以改变的任何要点都会有所帮助。
#include "stdafx.h"
#include <iostream>
#include <stdio.h>
#include <fstream>
#include <stdlib.h>
using namespace std;
void merge(int A[], int p, int q, int r) {
int i;
int j;
int k;
int n1 = q - p + 1;
int n2 = r - q;
double inf = std::numeric_limits<double>::infinity();
int* L = new int[n1 + 1];
int* R = new int[n2 + 1];
for (i = 0; i < n1; i++)
L[i] = A[p + i - 1];
for (j = 0; j < n2; j++)
R[j] = A[q + j];
L[n1 + 1 ] = inf;
R[n2 + 1 ] = inf;
i = 1;
j = 1;
for (k = p ; k < r; k++) {
if (L[i] <= R[j]) {
A[k] = L[i];
i++;
}
else{
A[k] = R[j];
j++;
}
}
}
void merges(int A[], int p, int r) {
if (p < r) {
int q = floor((p + r) / 2);
merges(A, p, q);
merges(A, q + 1, r);
merge(A, p, q, r);
}
}
void prin(int A[], int n) {
int j;
for (j = 0; j < n; j++)
printf("%d ", A[j]);
printf("\n");
}
int main()
{
fstream infile;
infile.open("number.txt");
if (infile.is_open()) {
int i;
int A[20];
int n = sizeof(A) / sizeof(*A);
int p = n;
for (int i = 0; i < n; i++) {
infile >> A[i];
}
merges(A, 0, n);
prin(A, n);
}
return 0;
}