BucketSort in C

Shantox

Mitglied
Hallo :)

Ich wollte gerade eine Übungsaufgabe zum Bucket Sort bearbeiten. Bin nach einer Stunde daran gescheitert. Ich habe mir mal aus dem Internet ein Programm rauskopiert, welches den Bucket Sort ausführt. Jedoch habe ich ein paar Verständnisschwierigkeiten. Was die main macht verstehe ich komplett, aber was die Funktion "Bucket_Sort" macht ist mir nicht wirklich klar geworden. Ich hoffe, dass mir das jemand kurz erklären kann, was die 3 for-Schleifen jeweils machen.
Vielen Dank

MfG

C:
/*
* C Program to Sort Array using Bucket Sort
*/
#include <stdio.h>

/* Function for bucket sort */
void Bucket_Sort(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;
}
/* End of Bucket_Sort() */

/* The main() begins */
int main()
{
    int array[100], i, num;

    printf("Enter the size of array : ");
    scanf("%d", &num);
    printf("Enter the %d elements to be sorted:\n",num);
    for (i = 0; i < num; i++)
        scanf("%d", &array[i]);
    printf("\nThe array of elements before sorting : \n");
    for (i = 0; i < num; i++)
        printf("%d ", array[i]);
    printf("\nThe array of elements after sorting : \n");
    Bucket_Sort(array, num);
    for (i = 0; i < num; i++)
        printf("%d ", array[i]);
    printf("\n");
    return 0;
}
 
Zuletzt bearbeitet von einem Moderator:

blubbrezn

Mitglied
Ui ui ui, aus der Quelle solltest du besser keinen Code mehr kopieren
Leider wird hier kein Buketsort implementiert, aber zumindest kann man einige Syntax Fehler verbessern

C:
/* Function for bucket sort */
void Bucket_Sort(int array[], int n)
{
   int i, j;
   int count[n];
   for (i = 0; i < n; i++){ // Klammern bei for Schleifen machen deutlich, was alles mehrmals
   // ausgeführt wird, sonst wird nur der nächste Befehl von der for Schleife erfasst
      count[n] = 0; //count ist ein Pointer, erst mit der Klammer wird ein Integer
      // angesprochen, dem ein Wert zugewiesen werden kann
   }

   for (i = 0; i < n; i++){
      (count[array[n]])++; //was der Programmierer hier wollte lässt sich
       //nur erahnen, array ist ein Pointer und eignet sich daher nicht als Index
   }

   for (i = 0, j = 0; i < n; i++){
      for(; count > 0; (count)--){
         array[j++] = i;
      }
   }
}
/* End of Bucket_Sort() */

Wenn du eine Bucketsort implementieren musst, musst du den Wertebereich kennen in dem deine Elemente sind.
 
Zuletzt bearbeitet:

mrBrown

Super-Moderator
Mitarbeiter
Ist Countingsort (wobei, ist das nicht nur ein Sonderfall des Bucketsort mit Bucketgröße 1?:p )

Die Syntaxfehler kommen allesamt durchs Forum, [i] wird als kursiv interpretiert ;)
 

blubbrezn

Mitglied
ok, ja so kann man das auch sehen :)
Das hab ich leider nicht gecheckt ein "[code] [/code]" Block wäre da praktisch.
Auch in meiner Verbesserung sollte natürlich statt [n] [i] stehen in Zeile 8 und 13.
Ich kann es leider nicht mehr bearbeiten:(, geht das noch ?
 
Zuletzt bearbeitet von einem Moderator:

Neue Themen


Oben