问题遇到的现象和发生背景
这是一个归并排序,是根据<算法导论第三版> 的伪代码写的,可是最终得到的结果总是错误的,不知道怎么回事总会访问到特定的数组外但是也没有发生编译过程的错误.
用代码块功能插入代码,请勿粘贴截图
我想要达到的结果
#include<iostream>
using namespace std;
void Merge(int *A,int p,int q,int r)
{
int n1 = q - p;
int n2 = r - q;
cout << "q-p=" << q - p << endl;
int* L = new int[n1+1];
int* R = new int[n2];
for (int i = 0; i <= n1; i++)
{
L[i] = A[p + i];
}
for (int j = 0; j < n2; j++)
{
R[j] = A[q + j + 1];
}
int i = 0;
int j = 0;
for (int k = p; k < r; k++)
{
if (L[i] <= R[j])
{
A[k] = L[i];
i++;
}
else
{
A[k] = R[j];
j++;
}
}
}
void Merge_Sort(int* A, int low, int high)
{
int mid;
if (low < high)
{
mid = ((low + high) / 2);
Merge_Sort(A, low, mid);
Merge_Sort(A, mid + 1, high);
Merge(A, low, mid, high);
}
}
int main()
{
int A[10] = {10,9,8,7,6,5,4,3,2,1};
int low = 0;
int high = 9;
int mid = (low + high) / 2;
Merge(A, low, mid, high);
Merge_Sort(A, 0, 9);
for (int m = 0; m < 10; m++)
{
cout << A[m] << " ";
}
cout << endl;
return 0;
}