2010-12-10 4 views
4

Ich habe eine Funktion, die ein Array von Zahlen nimmt und sie von niedrig nach hoch sortiert. Bis jetzt habe ich diesen Algorithmus, aber die Ausgabe ist nicht das, was ich erwarte. Kann jemand etwas Licht darauf werfen? Ich kann keine C-Bibliotheksfunktionen verwenden.Ein Array in C von niedrig nach hoch sortieren (ohne qsort)

/* 
    Sort "count" numbers stored in array numbers[] in non-decreasing order. 
    There may be duplicate numbers in the array. 
    You may use any sorting algorithm that you know. 
*/ 

void sort(double numbers[], int count) 
{ 
    int i, j, k; 
    //printf("%d", count); 

    double temp; 
    do{ 
     j = 0; 
     for (i = 0;i<=count;i++){ 
       if (numbers[i] > numbers[i+1]){//this was numbers[k], which was an error 
        j = 1; 
        temp = numbers[i]; 
        numbers[i] = numbers[i+1]; 
        numbers[i+1] = temp; 
       } 
      } 
    } while (j == 1); 
} 
+0

Was i<=count-2 oder i<count-1 ändern ist 'k' ...? – sje397

+2

Es ist ein Int. :-) – Eiko

Antwort

5

Die Bedingung in for Schleife i<=count ist falsch.

Gültiger Index im Array ist 0 bis count-1.
Da Sie Zugriff auf Wert bei Index i+1 in der Schleife:

if (numbers[i] > numbers[i+1]) 

i den Wert 0-count-2 nehmen, so die Bedingung

+0

Es funktioniert jetzt danke. –

+0

Gut zu wissen..aber vergessen Sie nicht, Wiki-Link zu lesen, geben Sie @stillstanding. Ihre Implementierung kann optimiert werden. – codaddict

0

Der Wert von k verwendet wird, aber die Variable wird nie initialisiert oder zugewiesen. Irgendwann wird Ihr Code versuchen, den Wert für den Zugriff auf numbers[count], wenn ein Array mit count Elemente maximale Index hat count-1

0

Sie nicht k initalised haben.

Der Algorithmus stoppt, sobald nur eine Zahl verschoben wurde. Sie müssen alle von ihnen bewegen.

Ich denke, dass Sie eine For-Schleife auf k außerhalb der While-Schleife vermissen, aber da ich nicht ganz sicher bin, was Sie hier versuchen, kann ich nicht sicher sein.

Warum können Sie Ihre eigene qsort() - Funktion nicht implementieren? Ist das erlaubt? Versuchen Sie, ein paar Sortieralgorithmen online zu lesen.

0

if (Zahlen [i]> Zahlen [k]) {

wahrscheinlich

if (Zahlen [i]> Zahlen [i + 1]) {

k isn‘sein soll t überhaupt benutzt.

for (i = 0;i <= count;i++){ 

soll wohl

for (i = 0; i < count-1;i++){ 

da es nur Elemente von 0 bis count-1, und dann auf den nächsten Sie vergleichen. Der Name für j ist Mist. Machen Sie es zu einem Booleschen namens didSwap. Und dann überdenken Sie Ihre Kodierung, vielleicht ist es genau umgekehrt ...

+0

Sorry [k] war eine frühere Bearbeitung. ich änderte das zu [i + 1, aber ohne Erfolg ... –

+0

Deshalb erwähnte ich die Zählungssache - aber SO mischte sich mit dem Text und zeigte den vollen Code nicht ... – Eiko