实现合并排序

时间:2015-01-27 13:59:38

标签: c++ mergesort

所以,我试图实现合并排序,我从概念上理解,但显然编程非常困难(我很缺乏经验)。我已经查看了以前的帖子,但是我无法理解这一点。我目前遇到以下错误:

  

13:20:错误:âSizeâ未在此范围内声明       mergesort(array [Size],low,mid);

     

41:20:错误:从âintâ到âint的转换无效* [-fpermissive]   mergesort(data [size],0,size-1);

     

6:6:错误:初始化参数1的变量mergesort(int *,int,   int)[-fpermissive] void mergesort(int array [],int low,int high)

我对如何进行一般非常困惑。我真的不知道如何将所有东西合并在一起。这看起来似乎不太困难,但递归确实让我感到困惑:/感谢您的帮助。

#include <iostream>
using namespace std;

void merge(int[], int, int, int);

void mergesort(int array[], int low, int high)
{
    int mid;

    if(low < high)
    {
       mid = low + (high-low)/2;
       mergesort(array[Size], low, mid);
       mergesort(array[Size], mid+1, high);
       merge(array[Size], low, mid, high);
    }
}

void merge(int array, int low, int mid, int high)
{

}

int main()
{
    int size;
    cin >> size;
    int data[size];

    for(int i = 0; i < size; i++)
    {
        cin >> data[i];
    }

    mergesort(data[size], 0, size-1);
}

2 个答案:

答案 0 :(得分:1)

data[Size]尝试从数组Size获取data值。 Size不存在,我不认为这就是你想要的。如果您想引用数组本身,只需使用它的名称:data

稍后您使用data[size]时遇到同样的问题,但在这种情况下确实存在size。该错误消息告诉您它无法将int转换为int*。当你声明一个像int array[]这样的函数参数时,它实际上只是int* array的语法糖。您正在将data[size]传递给此参数,该参数尝试从int访问data(尽管size超出范围)。因此,编译器不知道如何将int转换为int* - 它们是不同的类型。

请注意,以下代码不是标准C ++,因为不支持可变长度数组:

int size;
cin >> size;
int data[size];

也就是说,需要在编译时知道数组的大小,size不是。您可以使用std::vector<int> data(size);

此外,您的merge的声明和定义不匹配 - 一个将int作为其第一个参数,而另一个需要int[]

答案 1 :(得分:1)

您似乎无法理解静态数组与动态数组。

我建议使用std :: vector代替你的data [size]声明。

关于你的错误:

请注意,在mergesort函数中,您指的是未定义的Size。如果你想使用静态数组,我建议如下:

 #define SIZE 200
 ...
 int data[SIZE];

这将允许您使用相同的SIZE代码。

但是你的数组不会是你输入的大小。

如果要在运行时分配数组,则需要从

更改代码
 int size;
 cin >> size;
 int data[size]; 

 int size;
 cin >> size;
 int* data = new int[size];

然后,在mergesort函数中,您必须将大小作为参数传递。