sortieren von struct array mit quicksort



  • hallo leute!
    ich hab problem beim sortieren von einem struct array!!!
    http://rafb.net/paste/results/TJt16453.html

    ich will die struct arrays nach personalnummern sortieren!!!

    cu 😃



  • Ich habs mit nicht angesehen, aber die sortierfunktion aus <algorithm> kannst du mit ner eigenen Vergleichfunktion versorgen. Das ollste dein Problem lösen.



  • hi! danke es funzt schon;-)
    ich poste gleich den code...muss noch bissi kommentieren;-)

    thx@all

    cu



  • main programm:
    --------------------------------------------------------------------------------
    
    #include <string.h>
    #include <stdio.h>
    #include <conio.h>
    #include <stdlib.h>
    #include <assert.h>
    #include <iostream.h>
    #include <string.h>
    #include "Buchhaltung.h"
    
    // Feldgroesse
    const unsigned mitarbeiter_max=30;
    
    void main()
    {
    	unsigned anzahl_der_initialisierten_Elemente=0;
    
    	// Feld deklarieren 
    	struct Mitarbeiter alleMitarbeiter[mitarbeiter_max];
    
        // Feld initialisieren
    	anzahl_der_initialisierten_Elemente = initialisierung(alleMitarbeiter);
    
    	// Funktionstests
    	assert(anzahl_geschlecht_mitarbeiter(alleMitarbeiter, anzahl_der_initialisierten_Elemente, true)==1);
    	assert(anzahl_geschlecht_mitarbeiter(alleMitarbeiter, anzahl_der_initialisierten_Elemente, false)==2);
    	assert(personalnummer_sortiert(alleMitarbeiter, anzahl_der_initialisierten_Elemente)==false);
    
        // Gehaelter erhoehen
        gehalterhoeung(alleMitarbeiter, anzahl_der_initialisierten_Elemente, 3.0f, 100);
    
    	// Unsortiertes Feld ausgeben
    	ausgabe(alleMitarbeiter, anzahl_der_initialisierten_Elemente);
    
    	// Feld mit Quiksort sortieren 
    	sort(alleMitarbeiter, anzahl_der_initialisierten_Elemente); 
    
    	// Sortiertes Feld ausgeben
    	ausgabe(alleMitarbeiter, anzahl_der_initialisierten_Elemente);
    }
    
    funktionen:
    -------------------------------------------------------------------------------
    
    #include <string.h>
    #include <stdio.h>
    #include <conio.h>
    #include <stdlib.h>
    #include <assert.h>
    #include <iostream.h>
    #include <string.h>
    #include "Buchhaltung.h"
    
    void quickSort(Mitarbeiter array[], int left, int right);
    void swap(Mitarbeiter in_array[], int i, int j);
    
    unsigned initialisierung(Mitarbeiter Mitarbeiter_Feld[])
    {
    	unsigned i=0;
    
    	strcpy(Mitarbeiter_Feld[i].vorname,"Hans");
    	strcpy(Mitarbeiter_Feld[i].nachname,"Haider");
    	Mitarbeiter_Feld[i].personalnummer=2;
    	Mitarbeiter_Feld[i].alter=32;
    	Mitarbeiter_Feld[i].gehalt=100;
    	Mitarbeiter_Feld[i].geschlecht=true;
    
    	strcpy(Mitarbeiter_Feld[++i].vorname,"Irene");
    	strcpy(Mitarbeiter_Feld[i].nachname,"Blabla");
    	Mitarbeiter_Feld[i].personalnummer=1;
    	Mitarbeiter_Feld[i].alter=28;
    	Mitarbeiter_Feld[i].gehalt=1000;
    	Mitarbeiter_Feld[i].geschlecht=false;
    
    	strcpy(Mitarbeiter_Feld[++i].vorname,"Tina");
    	strcpy(Mitarbeiter_Feld[i].nachname,"Wert");
    	Mitarbeiter_Feld[i].personalnummer=3;
    	Mitarbeiter_Feld[i].alter=31;
    	Mitarbeiter_Feld[i].gehalt=1250;
    	Mitarbeiter_Feld[i].geschlecht=false;
    
    	return ++i;
    }
    
    unsigned anzahl_geschlecht_mitarbeiter(Mitarbeiter Mitarbeiter_Feld[], unsigned mitarbeiter_anzahl, bool geschlecht)
    {
    	unsigned anzahl=0;	
    
    	for(unsigned i=0; i<mitarbeiter_anzahl; i++)
    	{
    		if(Mitarbeiter_Feld[i].geschlecht==geschlecht)
    			anzahl++;			
    	}
    
    	return anzahl;		
    }
    
    bool personalnummer_sortiert(Mitarbeiter Mitarbeiter_Feld[], unsigned mitarbeiter_anzahl)
    {
    	unsigned anzahl=0;
    
    	for(unsigned i=0; i<mitarbeiter_anzahl-1; i++)
    	{
    		if(Mitarbeiter_Feld[i].personalnummer < Mitarbeiter_Feld[i+1].personalnummer)
    		{
    			anzahl++;
    		}
    	}
    	if(anzahl==(mitarbeiter_anzahl-1))
    		return true;
    
    	return false;
    }
    
    void gehalterhoeung(Mitarbeiter Mitarbeiter_Feld[], unsigned mitarbeiter_anzahl, float prozentsatz, unsigned sockelbetrag)
    {
    	for(unsigned i=0; i<mitarbeiter_anzahl; i++)
    	{
    		Mitarbeiter_Feld[i].gehalt += (Mitarbeiter_Feld[i].gehalt * prozentsatz/100) + sockelbetrag;
    	}
    }	
    
    void ausgabe(Mitarbeiter Mitarbeiter_Feld[], unsigned mitarbeiter_anzahl)
    {
    	for(unsigned i=0; i<mitarbeiter_anzahl; i++)
    	{
    		printf("Vorname: %s",Mitarbeiter_Feld[i].vorname);
            printf("\nNachname: %s",Mitarbeiter_Feld[i].nachname);
    	    printf("\nPersonalnummer: %d",Mitarbeiter_Feld[i].personalnummer);
            printf("\nAlter: %d",Mitarbeiter_Feld[i].alter);
    	    printf("\nGehalt: %0.01f",Mitarbeiter_Feld[i].gehalt);
    	    printf("\nGeschlecht: %d\n\n",Mitarbeiter_Feld[i].geschlecht);
    	}
    
    	printf("\n\n");
    }
    
    void sort(Mitarbeiter Mitarbeiter_Feld[], unsigned feldgroesse)   
    {   
          quickSort(Mitarbeiter_Feld,0, feldgroesse - 1);   
    }   
    
    void quickSort(Mitarbeiter array[], int left, int right)   
    {   
        int current, last;   
        if (left >= right) return;   
        swap(array, left, (left+right)/2);   
        last = left;   
        for (current = left + 1; current <= right; current++)   
        {   
           if (array[current].personalnummer < array[left].personalnummer)   
              swap(array, ++last, current);   
        }   
        swap(array, left, last);   
        quickSort(array, left, last-1);   
        quickSort(array, last+1, right);   
    }   
    
    void swap(Mitarbeiter in_array[], int i, int j)   
    {   
        struct Mitarbeiter temp;  
    
        memcpy(&temp, in_array+i, sizeof(struct Mitarbeiter)); 
        memcpy(in_array+i, in_array+j, sizeof(struct Mitarbeiter));  
        memcpy(in_array+j, &temp, sizeof(struct Mitarbeiter));
    }
    
    header-datei:
    --------------------------------------------------------------------------------
    
    struct Mitarbeiter
    {	
    	char vorname[100];
    	char nachname[100];
    	unsigned personalnummer;
    	unsigned alter;
    	bool geschlecht;
    	float gehalt;
    };
    
    unsigned anzahl_geschlecht_mitarbeiter(Mitarbeiter Mitarbeiter_Feld[], unsigned mitarbeiter_anzahl, bool geschlecht);
    unsigned initialisierung(Mitarbeiter Mitarbeiter_Feld[]);
    bool personalnummer_sortiert(Mitarbeiter Mitarbeiter_Feld[], unsigned mitarbeiter_anzahl);
    void gehalterhoeung(Mitarbeiter Mitarbeiter_Feld[], unsigned mitarbeiter_anzahl, float prozentsatz, unsigned sockelbetrag);
    void ausgabe(Mitarbeiter Mitarbeiter_Feld[], unsigned mitarbeiter_anzahl);
    void sort(Mitarbeiter Mitarbeiter_Feld[], unsigned feldgroesse);
    

    funzt nun ganz prima;-))
    was meint ihr dazu?

    cu 😃 👍


Anmelden zum Antworten