[inf.fh-rosenheim] <no subject>

  • From: Christoph Behounek <admiral49@xxxxxx>
  • To: "inf.list" <inf.fh-rosenheim@xxxxxxxxxxxxx>
  • Date: Wed, 26 Jun 2002 14:34:29 +0200

// Heapsort=20
// 06.06.01


#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>

#define ANZ 10

int a[ANZ], schritte ;



void repariere=5Frek=5Fheap(int *a,int n, int w){
        int i,h;
        i=3Dw;
        =09
                if (i*2+1 >=3Dn)=20
                        return; // Falls in einem Blatt - keine Nachfolger

                if ((i*2+2 >=3Dn)&&(a[i*2+1] >a[i])){ // nur linker Nachfolger 
+ Gr=F6sser a=
ls knoten
                        h =3D a[i];=09
                        a[i] =3D a[i*2+1];
                        a[i*2+1] =3D h;
                        return;
                }
                else
                        if (i*2+2 >=3Dn){ // nur linker Nachfolger + kleiner 
als knoten
                =09
                        return;
                }
                if ( i*2+2<n){ // zwei Nachfolger
                        if ((a[i]>a[i*2+1]) && (a[i]>a[i*2+2])){
                                return;
                        }

                        else if ( a[i*2+1] > a[i*2+2] ){ // linker Nachfolger 
gr=F6sser als recht=
er
                                if ( a[i*2+1] > a[i]){ // linker Nachfolger 
gr=F6sser als Knoten
                                        h =3D a[i];
                                        a[i] =3D a[i*2+1];
                                        a[i*2+1] =3D h;
                                        repariere=5Frek=5Fheap(a,n,i*2+1);
                                }
                        }
                        else if ( a[i*2+1] < a[i*2+2] ){// rechter Nachfolger 
gr=F6sser als linke=
r
                                if (a[i*2+2]>a[i]){// rechter Nachfolger 
gr=F6sser als Knoten
                                        h =3D a[i];
                                        a[i] =3D a[i*2+2];
                                        a[i*2+2] =3D h;
                                        repariere=5Frek=5Fheap(a,n,i*2+2);
                                }
                        }
                =09
        =09
        }
}




void repariere=5Fheap(int *a,int n, int w){
        int i,h;
        i=3Dw;
        while (i<n){
        =09
                if (i*2+1 >=3Dn)=20
                        return; // Falls in einem Blatt - keine Nachfolger

                if ((i*2+2 >=3Dn)&&(a[i*2+1] >a[i])){ // nur linker Nachfolger 
+ Gr=F6sser a=
ls knoten
                        h =3D a[i];=09
                        a[i] =3D a[i*2+1];
                        a[i*2+1] =3D h;
                        return;
                }
                else
                        if (i*2+2 >=3Dn){ // nur linker Nachfolger + kleiner 
als knoten
                =09
                        return;
                }
                if ( i*2+2<n){ // zwei Nachfolger
                        if ((a[i]>a[i*2+1]) && (a[i]>a[i*2+2])){
                                return;
                        }

                        else if ( a[i*2+1] > a[i*2+2] ){ // linker Nachfolger 
gr=F6sser als recht=
er
                                if ( a[i*2+1] > a[i]){ // linker Nachfolger 
gr=F6sser als Knoten
                                        h =3D a[i];
                                        a[i] =3D a[i*2+1];
                                        a[i*2+1] =3D h;
                                        i=3Di*2+1;
                                }
                        }
                        else if ( a[i*2+1] < a[i*2+2] ){// rechter Nachfolger 
gr=F6sser als linke=
r
                                if (a[i*2+2]>a[i]){// rechter Nachfolger 
gr=F6sser als Knoten
                                        h =3D a[i];
                                        a[i] =3D a[i*2+2];
                                        a[i*2+2] =3D h;
                                        i=3Di*2+2;
                                }
                        }
                =09
                }
        }
}

void erzeuge=5Fheap( int *a, int n, int w){
=09
        if ( w*2+1<n ) erzeuge=5Fheap(a,n,w*2+1);
        if ( w*2+2<n ) erzeuge=5Fheap(a,n,w*2+2);
=09

        repariere=5Frek=5Fheap(a, n, w);
=09
}

void heapsort ( int *a, int n ){
        int i,h;

        erzeuge=5Fheap(a,n,0);
        for ( i =3D0;i<n-1;i++){
                h=3D a[0];
                a[0] =3D a[n-i-1];
                a[n-1-i] =3Dh;
                repariere=5Frek=5Fheap(a,n-1-i, 0);
        }
}



void init()
{       =20
        int i;
        srand( (unsigned)time( NULL ) );=09
        for (i=3D0 ; i<ANZ ; i++)
        {
                a[i] =3D rand();        =09
                /*printf("%i \n",a[i]);*/
        }
=09
}



int main  ()
{
        int erg =3D0,i;
=09
        init();
        printf ("init: ");
        for (i=3D 0 ; i<ANZ; i++)
        {
                printf ("%5i " , a[i]);

        }

        erzeuge=5Fheap(a, ANZ, 0);
        printf ("\nerze: ");
        for (i=3D 0 ; i<ANZ; i++)
        {
                printf ("%5i " , a[i]);
        }

        heapsort(a,ANZ);
        printf ("\nsort: ");
        for (i=3D 0 ; i<ANZ; i++)
        {
                printf ("%5i " , a[i]);
        }

}

=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F
Keine verlorenen Lotto-Quittungen, keine vergessenen Gewinne mehr!=20
Beim WEB.DE Lottoservice: http://tippen2.web.de/=3Fx=3D13



Other related posts:

  • » [inf.fh-rosenheim] <no subject>