-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(int A[],int left, int right) を QuickSort(A[],A,A+N) で呼び出そうとすると、「 "]" トークンの前にプライマリ式が必要」というエラーが発生します。フィードバックをお寄せいただきありがとうございます。

4

3 に答える 3

3

このように A. を渡すだけです。また、2 番目と 3 番目のパラメーターは int 値であるため、コードのロジックに飛び込むことはしませんが、整数を選択して配列の並べ替えに制限を与える必要があります。あなたが今渡しているのは、配列の最初の要素への int * であり、3 番目のパラメーターはその値 + 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

2つのこと:

  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 に答える