我可以帮助我合并排序程序吗? [英] can someone help me with my merge sort program?
问题描述
我不确定如何放置Merge()函数。现在,当我运行程序时,它说Merge.exe触发了一个休息时间。  点。如果我需要将Merge()函数放在main中,我如何处理int middle作为参数?
I am not so sure how should i place the Merge() function. right now, when I run the program, it says Merge.exe triggered a break. point. If i need to place the Merge()function inside the main, how do i handle the int middle as an argument?
#include <iostream>
#include <vector>
#include <ctime>
using namespace std;
void MergeSort(int A[], int start, int end);
void Merge(int A[], int start, int middle, int end);
int main()
{
//first, generate a amount of numbers and use a vector to hold it
int size;//the number of integers to sort
cout << "Enter the size of the number you wish to sort--";
cin >> size;
int *A = new int[size];
//generate random numbers
srand(time(0));//make sure numbers are different on each run in while loop
for (int x = 0; x < size; x++) A[x]=rand() % size;//the generated numbers will be within the range of 0 to size
int start = 0, end = size - 1;
MergeSort(A, start, end);
}
void MergeSort(int A[], int start, int end)
{
if (start < end)
{
int mid = (start + end) / 2;
MergeSort(A, start, mid);
MergeSort(A, mid + 1, end);
Merge(A, start, mid, end);
}
}
void Merge(int A[], int start, int middle, int end)
{
int p = start, q = middle + 1, k = 0;
int *A2=new int [end - start + 1];//I remember this is C++14 feature
for (int x = 0; x <= end; x++)
{
if (p > middle) A2[k++] = A[q++];
else if (q > end) A2[k++] = A[p++];
else if (A[p] < A[q]) A2[k++] = A[p++];
else A2[k++] = A[q++];
}
for (int x = 0; x < k; x++)
{
A[start++] = A2[x];
}
}
推荐答案
2017年2月28日下午5:21,为什么dot net比non dot net更好写道:
On 2/28/2017 5:21 PM, Why is dot net better than non dot net wrote:
void Merge(int A [],int start,int middle,int end)
{
int p = start,q = middle + 1,k = 0;
int * A2 = new int [end - start + 1]; //我记得这是C ++ 14特性
void Merge(int A[], int start, int middle, int end)
{
int p = start, q = middle + 1, k = 0;
int *A2=new int [end - start + 1];//I remember this is C++14 feature
不是真的。这是vanilla C ++。
Not really. This is vanilla C++.
for(int x = 0; x< = end; x ++)
{
&NBSP; if(p> middle)A2 [k ++] = A [q ++];
&NBSP;否则如果(q>结束)A2 [k ++] = A [p ++];
&NBSP;否则如果(A [p]
&NBSP;否则A2 [k ++] = A [q ++];
for (int x = 0; x <= end; x++)
{
if (p > middle) A2[k++] = A[q++];
else if (q > end) A2[k++] = A[p++];
else if (A[p] < A[q]) A2[k++] = A[p++];
else A2[k++] = A[q++];
您正在将结束+ 1值写入A2 - 但您只为末尾分配了足够的内存+ 1开始他们。您的程序通过缓冲区溢出显示未定义的行为。
You are writing end+1 values into A2 - but you've only allocated enough memory for end+1-start of them. Your program exhibits undefined behavior by way of buffer overrun.
这篇关于我可以帮助我合并排序程序吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!