Radix Sort C#

11/19/2011 22:52 *scarface*#1
Hallo Community,

ich habe ein kleines Problem.

Ich habe schon das meistse des Quelltextes kommentiert, allerdings verstehe ich den in #ten gekennzeichneten Bereich nicht....

Ich wäre euch sehr dankbar, wenn Ihr mir beim verstehen dieser 4 Zeilen behilflich sein könntet! :)

Code:
/* Written by Sanchit Karve (born2c0de)
   Contact Me at born2c0de AT dreamincode DOT net
*/
 
#include <stdio.h>
 
#define MAX 20
//#define SHOWPASS
 
void print(int *a,int n) // Funktion Printf nur für Array
{
                int i;      // Laufvariable   
                // a[i] = der Anzahl der eingegebenen Arrays    
        for(i=0;i<n;i++)    
                        printf("%d\t",a[i]);
}
   
void radixsort(int *a,int n)
{
                int i,b[MAX],m=0,exp=1;
                for(i=0;i<n;i++)// n = Elementanzahl
                {
                        if(a[i]>m) // wenn a[element (i) ] größer als m ( = 0) dann
                                m=a[i]; // setzte = sogroß wie das elemnt 
                        
                }// SUCHE DES GROESSTEN ARRAY ELEMNTS!!!
               
                while(m/exp>0)// solange m ( = größtes element) / 1 ist größer als 0
                {
                        int bucket[10]={0}; // erstellt array mit 10 Feldern und alle beinhalten die Zahl 0
                        for(i=0;i<n;i++) // solange i ( = 0) ist kleiner als n( = elementanzahl)       
                                bucket[a[i]/exp%10]++; 
                                // a[i]/exp%10 macht die letzte Ziffer ausfindig
                                // bucket[a[i]/exp%10]++; Erhöht die Arraystelle der Aufindig gemachten Endzahl um1 ( letzte zahl 9 array an Stelle 9 und eins erhöht)
                                
##########################################################################################################################################
                        for(i=1;i<10;i++) // solange i ( = 1) ist keliner als 10
                                //printf("\nFeld%d",bucket[i]);
                                bucket[i]+=bucket[i-1];
                                // bucket[i] = Anzahl der Zahlen in jedem Array Part ist 
                                // bucket[i-1] = Anzahl der Zahlen im Array vor dem jetzigen Array
                        for(i=n-1;i>=0;i--)// i = n (Anzalh der elemente -1) solange bis i größer oder gleich 0 ist
                                b[--bucket[a[i]/exp%10]]=a[i]; <------
##########################################################################################################################################
                        for(i=0;i<n;i++)
                                a[i]=b[i];
                        exp*=10;
 
//#ifdef SHOWPASS
                    printf("\nPASS   : ");
                        print(a,n);
//#endif
                }               
        }
 
 
int main()
{
           int arr[MAX]; // Array Größe
           int i,n; // n = Elemntzahl, i = Laufvariable für for-schleife
           
           printf("Enter total elements (n < %d) : ",MAX);
           scanf("%d",&n);// Einlesen der Anzahl
           
           printf("Enter %d Elements : ",n);
           for(i=0;i<n;i++) // einlesen der einzelnen Elemnte
                                scanf("%d",&arr[i]);  //speichern der einzelnen Elemnte in dem Array
           
           
           printf("\nARRAY  : ");
           print(&arr[0],n);// Augsgeben aller Array veriablen
           
           
           radixsort(&arr[0],n);
           
           printf("\nSORTED : ");
           print(&arr[0],n);
           printf("\n");
           
           getchar();
           getchar();
           getchar();
           
           return 0;
}

Vielen Dank im Vorraus!

Liebe Grüße
Scarface

Hat sich gerklärt =)

Bitte schließen! :)