# BucketSort in C



## Shantox (10. Nov 2016)

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 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;
}
```


----------



## blubbrezn (28. Nov 2017)

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


```
/* 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.


----------



## mrBrown (28. Nov 2017)

Ist Countingsort (wobei, ist das nicht nur ein Sonderfall des Bucketsort mit Bucketgröße 1? )

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


----------



## blubbrezn (30. Nov 2017)

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 ?


----------

