2013-03-21 6 views
-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), появляется ошибка, в которой говорится «ожидаемое первичное выражение перед»] «токен». Заранее благодарю вас.Вызывающая функция // ожидаемое первичное выражение перед «]» токеном

+5

На, это не хороший вопрос для SO. Вы должны приложить усилия, чтобы, по крайней мере, изучить основы языка. – 2013-03-21 21:51:07

+0

вот как сделать БОЛЬШОЙ вход – 4pie0

ответ

0

Вы не должны использовать фигурные скобки при передаче массивов в функции, также, кажется, ваш код должен быть:

QuickSort(A,0,0+N); 
3

просто пройти в A. вот так. также ваш второй и третий параметры являются значениями int, поэтому, хотя я не буду погружаться в логику вашего кода, вы должны выбрать aninteger, чтобы обеспечить границы сортировки вашего массива. то, что вы сейчас проходите, это 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; 

} 
+0

Работал. Ty очень за ответ :) –

1

Две вещи:

  1. Pass 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. 
+0

Работал. Ты очень сильно ответишь :) –

Смежные вопросы