合并排序返回错误的值

时间:2018-02-27 01:20:42

标签: c++

我正在研究合并排序算法,我没有得到我正在寻找的输出。我正在输入一个包含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;
}

0 个答案:

没有答案