`#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”的错误。 提前感谢您的反馈。
答案 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)
两件事:
A
。 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.
答案 2 :(得分:0)
将数组传递给函数时不应该使用大括号,而且代码应该是:
QuickSort(A,0,0+N);