array bucket-sort in C
Ich versuche zu Lesen Liste von zahlen aus txt-Datei und Sortieren Sie dann mit Bucket-sort.
so, hier ist mein code:
void bucketSort(int array[],int *n)
{
int i, j;
int count[*n];
for (i = 0; i < *n; i++)
count[i] = 0;
for (i = 0; i < *n; i++)
(count[array[i]])++;
for (i = 0, j = 0; i < *n; i++)
for(; count[i] > 0; (count[i])--)
array[j++] = i;
}
int main(int brArg,char *arg[])
{
FILE *ulaz;
ulaz = fopen(arg[1], "r");
int array[100];
int i=0,j,k,n;
while(fscanf(ulaz, "%d", &array[i])!=EOF)i++;
fclose(ulaz);
n=i;
for (j = 0; j<i; j++)
{
printf("Broj: %d\n", array[j]);
}
BucketSort(array,&n);
for (k = 0; k<i; k++)
printf("%d \n", array[i]);
return 0;
}
Es sind keine Fehler im code,aber wenn ich rufe meine Funktion anstelle des sortierten array bekomme ich die array-Länge Zufallszahlen(Beispiel: 2 3 5 4 nach dem Sortieren bekomme ich 124520 124520 124520 124520 oder einige andere zufällige Zahl), da ich bin ein Anfänger,könnte mir jemand helfen mit meinem code und was ich falsch gemacht habe? (sorry für schlechtes Englisch)
- Dein code funktioniert, wenn
i
ist größer als alle Werte des Arraysarray
Du musst angemeldet sein, um einen Kommentar abzugeben.
Als Cool Guy richtig darauf hingewiesen, dass Sie Probleme haben, mit den Speicher zugreifen, aber oben drauf der code nicht sortiert, nichts. Zunächst sollten Sie Lesen, wie Bucket Sort tatsächlich funktioniert.
Im Allgemeinen:
Hier ist ein Beispiel von deinen original-code, ich habe versucht, passen Sie es so wenig wie möglich, Sie es ist einfacher für Sie zu verstehen. Dieser code teilt eine vordefinierte Eingabe-array unter 3 Eimer von Bereich:
dann führt Quicksort auf jeden Eimer und verkettet das Ergebnis. Ich hoffe, das hilft zu verstehen, wie dieser Algorithmus funktioniert.
Dein code weist Undefiniertes Verhalten, wie Sie versuchen zu schreiben in den Speicher Ort, die nicht im Besitz von Ihrem Programm.
Den obigen Schleife ist, die das problem verursacht. Sie sagen, dass
i
ist 4, was bedeutet, dass*n
ist auch 4 undarray
enthält2 3 5 4
. Im obigen codecount
ist ein array von*n
Elemente(in diesem Fall 4 Elemente) und die gültigen Indizes für das arraycount[0]
,count[1]
,count[2]
undcount[3]
. Dabeiwenn
i
null ist in Ordnung wie es ist die gleiche wiecount[2]
. Das ist das gleiche wenni
1 ist, wie es wärecount[3]
. Nach, dass ,wenni
4 und 5count[4]
undcount[5]
sind falsch, wie Sie versuchen zu schreiben, auf eine ungültige Speicheradresse.Auch,Ihren code nicht ganz die Werte Sortieren.