2011-02-10 3 views
1

J'ai écrit un programme pour trier récursivement un tableau. Cependant, j'obtiens l'erreur suivante sur la ligne 11: erreur de syntaxe avant le jeton ']'.Fonction de tri récursive

Voici le code:

//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); 
} 
+0

est ce devoir? – tenfour

Répondre

3

Il semble que vous essayez d'imprimer tout le tableau, ce que C ne fera pas en un appel à printf. , Vous avez besoin au lieu d'une boucle à parcourir le tableau et imprimer chaque numéro individuellement:

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

Depuis rec_sort ne retourne pas le tableau, vous devez également invoquer séparément de l'appel printf, de sorte que vous » d obtenir quelque chose comme:

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

// print the sorted values: 
for (i=0; i<4; i++) 
    printf("%x\n", vals[i]); 
+0

j'ai oublié que C n'est pas aussi flexible que java. Maintenant, je reçois l'erreur suivante: référence non définie pour trier – kachilous

+0

@Krysten, regardez en bas 'sort (valeurs, n-1);' C'est une faute de frappe! ':)' – Muggen

+0

Il compile et exécuté. Mais maintenant, je reçois des numéros funky: 25 30 38 3f – kachilous

3

Il suffit de retirer la [] la ligne 11. Mais ceci est une réponse naïve à votre question, et ne vous mènera loin. Il y a d'autres problèmes - la plus évidente est l'idée de printf(..., rec_sort(...)...);

Considérant rec_sort est de type void de retour, comment voulez-vous printf() à comprendre ce qu'il faut faire? Je ne suis pas sûr de ce que vous voulez non plus, mais cela devrait être au moins un début pour vous.

+0

ne compile toujours pas – kachilous

+0

@Krysten, quelle erreur obtenez-vous? – Muggen

+0

J'imagine que c'est parce que rec_sort est vide ou parce que vous êtes censé utiliser qsort en C –

0

Le problème est dans ce:

rec_sort(vals[], 4) 

Que voulez-vous voulez y faire? Le [] est une opération d'index, donc soit vous devez mettre un nombre là-dedans, ou vous les laissez complètement (si vous voulez parler de tout le tableau).

+0

L'OP a fait l'hypothèse raisonnable que, puisque rec_sort a un paramètre values ​​[], il peut être appelé avec un argument vals []. Comme il est, cependant, on ne peut pas programmer en faisant de telles hypothèses, il faut réellement apprendre les règles d'un langage de programmation. Mais pourquoi prendre la peine d'apprendre quoi que ce soit si vous pouvez simplement venir à SO chaque fois que quelque chose ne fonctionne pas? Espérons que ceux qui adopteront cette approche finiront par apprendre qu'ils ne peuvent pas aller très loin avec cela. –

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

mais rec_sort() est void. Ne pas return quoi que ce soit

void rec_sort(int values[], int n) 

En outre, Déclarez votre principal comme int main()

0

La première chose que vous devez faire est de supprimer les crochets:

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

Deuxièmement, notez que rec_sort retourne void, donc vous ne pouvez pas utiliser la valeur de retour

vous avez besoin

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"); 

Troisième: vous devez appeler à nouveau rec_sort

Quatrième: qu'est-ce que vous tryin à faire avec la déclaration system?

+0

"Troisièmement: vous avez besoin d'une implémentation de tri (êtes-vous sûr de ne pas vouloir dire qsort?)" Non, elle signifie évidemment rec_sort - c'est supposé être récursif. –