在“]”标记之前调用函数//期望的primary-expression

时间:2013-03-21 21:48:07

标签: c++

`#include <iostream>

 using namespace std;

 #define N 10

 void QuickSort(int arr[],int left,int right)
{
int i = left, j = right;
int buffer;
int middle = arr[(left+right)/2];

//partition
while(i<=j)
{
    while(arr[i]<middle)
        i++;
    while(arr[j]>middle)
        j--;
    if(i<=j)
    {
        buffer = arr[i];
        arr[i] = arr[j];
        arr[j] = buffer;
        i++;
        j--;
    }
}

//recursion
 if (left < j)
    QuickSort(arr, left, j);
 if (i < right)
    QuickSort(arr, i, right);
}

int main()
{

  int A[N] = {10,9,8,7,6,5,4,3,2,1};
  QuickSort(A[],A,A+N);     //ERROR
  return 0;

}`

好的,伙计们 - 这是我的问题。我无法真正得到如何调用该函数来对非标准非动态数组进行排序。当我尝试使用QuickSort(A []​​,A,A + N)调用QuickSort(int A [],int left,int right)时,出现“之前预期的primary-expression”,“token”的错误。 提前感谢您的反馈。

3 个答案:

答案 0 :(得分:3)

像这样直接传入A.你的第二个和第三个参数也是int值,所以虽然我不会深入研究代码的逻辑,但你应该选择一个整数来为你的数组排序提供边界。你现在传递的是数组中第一个元素的int *,然后第三个参数是值+ N. BAD NEWS BEARS!

#include <iostream>

 using namespace std;

 #define N 10

 void QuickSort(int arr[],int left,int right)
{
int i = left, j = right;
int buffer;
int middle = arr[(left+right)/2];

//partition
while(i<=j)
{
    while(arr[i]<middle)
        i++;
    while(arr[j]>middle)
        j--;
    if(i<=j)
    {
        buffer = arr[i];
        arr[i] = arr[j];
        arr[j] = buffer;
        i++;
        j--;
    }
}

//recursion
 if (left < j)
    QuickSort(arr, left, j);
 if (i < right)
    QuickSort(arr, i, right);
}

int main()
{

  int A[N] = {10,9,8,7,6,5,4,3,2,1};
  QuickSort(A,0,N);     //DO THIS
  return 0;

}

答案 1 :(得分:1)

两件事:

  1. 单独传递A
  2. leftright是数组索引,而不是指针。
  3. 尝试一下:

    int A[N] = {10,9,8,7,6,5,4,3,2,1};
    QuickSort(A, 0, N - 1); // array length N means the last element is index N-1.
    

答案 2 :(得分:0)

将数组传递给函数时不应该使用大括号,而且代码应该是:

QuickSort(A,0,0+N);