我可以帮助我合并排序程序吗? [英] can someone help me with my merge sort program?

查看:58
本文介绍了我可以帮助我合并排序程序吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我不确定如何放置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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆