Функция рекурсивной сортировки - PullRequest
1 голос
/ 10 февраля 2011

Я написал программу для рекурсивной сортировки массива. Однако в строке 11 появляется следующая ошибка: синтаксическая ошибка перед маркером ']'.

Вот код:

//This program recursively sorts an array

#include<stdio.h>

void rec_sort(int values[], int n); 

main()
{
    int vals[4];
    vals[0] = 37; vals[1] = 48; vals[2] = 56; vals[3] = 63;
    printf("this array sorted: %x\n", rec_sort(vals[], 4));

    system("Pause"); 
    return 0;
}

void rec_sort(int values[], int n) {
//Base case
if (n<2) return;

int maxIndex=0;
int i;

//Find max item in array in indexes 0 through n-1
for(i=1; i<n;i++) {
      if(values[i] > values[maxIndex])
         maxIndex=i;

    }

    //Swap this element with one stored in n-1
    //Set temp to n-1, set n-1 in array to max, set max to temp
    int temp = values[n-1]; //Store temp as last element in array
    values[n-1] = values[maxIndex]; //Store last element as max value in array
    values[maxIndex] = temp; //temp will keep on changing, as array is sorted

    //Recursively sort the array values of length n-1
    sort(values, n-1); 
}

Ответы [ 5 ]

3 голосов
/ 10 февраля 2011

Похоже, вы пытаетесь распечатать весь массив, что С не сделает за один вызов printf.Вместо этого вам нужен цикл для итерации по массиву и распечатки каждого числа в отдельности:

for (i=0; i<4; i++)
    printf("%x\n", vals[i]);

Поскольку rec_sort не возвращает массив, вам также нужно вызывать его отдельно от вызова printfтак что вы получите что-то вроде:

// sort the data:
rec_sort(vals, 4);

// print the sorted values:
for (i=0; i<4; i++)
    printf("%x\n", vals[i]);
3 голосов
/ 10 февраля 2011

Просто удалите [] в строке 11. Но это наивный ответ на ваш вопрос, и вы не доберетесь далеко. Есть и другие проблемы - наиболее очевидной является идея printf(..., rec_sort(...)...);

Учитывая, что rec_sort имеет void тип возврата, как вы ожидаете printf(), чтобы понять, что делать? Я не уверен, что вы хотите, но это должно быть по крайней мере для вас.

1 голос
/ 10 февраля 2011
printf("this array sorted: %x\n", rec_sort(vals[], 4));

, но rec_sort() равно void.Не return ничего

void rec_sort(int values[], int n)

Кроме того, объявить ваш основной как int main()

0 голосов
/ 10 февраля 2011

Первое, что вы должны сделать, это снять квадратные скобки:

printf("this array sorted: %x\n", rec_sort(vals, 4));

Во-вторых, обратите внимание, что rec_sort возвращает void, поэтому вы не можете использовать возвращаемое значение

вам нужно

int i; // at the top of the main
// ...
rec_sort(vals, 4);
printf("this array sorted: ");
for(i = 0; i < 4; ++i) printf("%x ", vals[i]);
printf("\n");

Третье: вам нужно снова вызвать rec_sort

Четвертое: что вы пытаетесь сделать с оператором system?

0 голосов
/ 10 февраля 2011

Проблема в этом:

rec_sort(vals[], 4)

Что именно вы хотите там делать?[] является индексной операцией, поэтому либо вам нужно ввести число туда, либо вы пропустите их полностью (если вы хотите поговорить о всем массиве).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...