Rekursive Sortierfunktion
Ich habe ein Programm geschrieben, um rekursiv ein array Sortieren.
Allerdings bekomme ich die folgende Fehlermeldung in line 11: syntax error before ']' token.
Hier ist der 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);
}
- ist dieses Hausaufgaben?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es sieht aus wie Sie versuchen, drucken Sie das gesamte array, die C nicht in einem Aufruf zu
printf
. Stattdessen müssen Sie eine Schleife, um das array Durchlaufen und drucken Sie jede Zahl einzeln:Seit
rec_sort
ist nicht die Rückkehr der Arrays, die Sie auch brauchen, um es aufzurufen separat aus dem Aufruf der printf, also würden Sie etwas wie:sort(values, n-1);
Es ist ein Tippfehler!:)
%x
in Ihremprintf()
Blick auf diese Antwort, und ändern Sie%x
zu%d
.%x
nur, weil Ihr ursprünglicher code hat.%x
jedoch, formatiert zahlen in hexadezimale. Wenn Sie wollen, dass Sie in dezimal, es zu ändern%d
.[]
ist noch nicht Teil des namens der variable; und eine Funktion zurückgibt, dievoid
noch zurückvoid
(und somit können Sie nicht verwenden, Ihr Rückgabewert in einen Ausdruck).Entfernen Sie einfach die
[]
auf der Linie 11. Aber das ist eine naive Antwort auf Ihre Frage, und kommt man nicht weit. Es gibt noch andere Probleme - die meisten offensichtlich ist die Idee vonprintf(..., rec_sort(...)...);
Angesichts
rec_sort
hatvoid
zurück geben, wie Sie erwarten, dassprintf()
zu verstehen, was zu tun ist? Ich bin mir nicht sicher, was Sie wollen, aber das sollte zumindest ein Anfang für Sie.qsort
in der standard-Bibliothek.aber
rec_sort()
istvoid
. Nichtreturn
allesDeklarieren Sie außerdem Ihre Haupt-als
int main()
Das problem ist in diesem:
Was genau möchtest du da tun? Die
[]
eine index-operation, so dass entweder Sie müssen eine Zahl in es, oder verlassen Sie Sie ganz heraus (wenn Sie reden möchte, die ganze Palette).Das erste, was Sie tun sollten ist entfernen Sie die eckigen Klammern:
Zweite, beachten Sie, dass rec_sort gibt void zurück, so dass Sie nicht verwenden die return-Wert
müssen Sie
Drittens: Sie brauchen, um zu rufen rec_sort wieder
Viertens: was sind Sie tryin zu tun mit der
system
Aussage?