-8
`#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) 时,会出现一个错误,提示“在 "]" token 之前预期的主表达式"。提前感谢您的反馈。

4

3 回答 3

3

像这样传入A。您的第二个和第三个参数也是 int 值,因此虽然我不会深入探讨您的代码逻辑,但您应该选择一个整数来为您的数组排序提供界限。您现在传入的是数组中第一个元素的 int *,然后第三个参数是该值 + N。坏消息熊!

#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;

}
于 2013-03-21T21:50:16.593 回答
1

两件事情:

  1. 自己A过去。
  2. left并且right是数组索引,而不是指针。

试试这个:

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.
于 2013-03-21T21:54:07.333 回答
0

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

QuickSort(A,0,0+N);
于 2013-03-21T21:52:03.967 回答