Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » qsort

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
05.11.2005, 08:35 Uhr
burton



Seas!
I weiß leider nicht ob ich hier im richtigen Bereich bin, aber ich hoffe schon! Habe ein Problem mit Quicksort! Habe die Funkt, aber leider habe ich keine Ahnung wie sie funktioniert, wenn ich zum Bsp Strings sortiere!

Bitte um Hilfe!

Hier folgt noch der Quellcode für qsort!


C++:
void QSort_ab(void *A, int anzahl, int size, tFunkVoid vergleich)
{    
int i,j;
char *temp = new char[size];
char *L = (char*)A;

    for (i=anzahl-1; i>0; i--)
    {    
        for (j=1; j<i; j++)
        {
            if (vergleich(L+j*size, L+(j-1)*size) > 0)
            {
                memcpy(temp, L+j*size, size);
                memcpy(L+j*size, L+(j-1)*size, size);
                memcpy(L+(j-1)*size, temp, size);
            }
        }
    }
    delete[] temp;
}



MFG Georg
--
bUrToN RuLeZ
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
05.11.2005, 10:28 Uhr
Uwe
C/C++ Master
(Administrator)


Hallo,
ich verschieb das mal nach C/C++
--
"Es ist schwierig, ein Programm wirklich idiotensicher zu machen, weil Idioten so genial sind."

Bis dann...
Uwe
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
05.11.2005, 10:49 Uhr
burton



Okay thk Uwe wusste leider net, wo ich das hinposten sollte!
--
bUrToN RuLeZ
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
05.11.2005, 11:11 Uhr
virtual
Sexiest Bit alive
(Operator)


Ich will dich ja nicht enttäuschen, aber das ist kein qsort! Das ist ein Insertsort (zum Unterschied: www.hipphampel.de/index.php?item=cpp/sorting/quicksort bzw. www.hipphampel.de/index.php?item=cpp/sorting/insertionsort).

Aber anyway:
Du musst eine Funktion zum VErlgeichen der Strings schreiben, etwa

C++:
int vergleichen(const char** a, const char**) {
    return strcmp(*a, *b);
}


Dann kannst Du ein Stringarray wie Folgt sortieren:

C++:
char* strings [] = {  "Schön", "ist", "es",  "auf", "der", "Welt", "zu", "sein",
                               "sagt", "die", "Biene", "zu", "dem", "Stachelschwein" };

QSort_ab(strings, sizeof(strings)/sizeof(*strings), sizeog(*strings), vergleichen):


--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)

Dieser Post wurde am 05.11.2005 um 11:12 Uhr von virtual editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
05.11.2005, 17:04 Uhr
burton



Vielen dank virtual! Qsort is bei meinen Programm nur eine Funktion genauso wie Vergleiche!

Ich stell nun mal das on, was ich bis jetzt habe, bei dem qsort Bsp:


C++:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

typedef int (*tFuncInt)(int);
typedef int (*tFuncInt2)(int, int);
typedef int * (*tfuncInt2)(int A[]);

typedef int (tFunkVoid)(const void*, const void*);

/**************************************************************
Modulname:     Quicksort
**************************************************************/

void QSort_ab(void *A, int anzahl, int size, tFunkVoid vergleich)
{    
int i,j;
char *temp = new char[size];
char *L = (char*)A;

    for (i=anzahl-1; i>0; i--)
    {    
        for (j=1; j<i; j++)
        {
            if (vergleich(L+j*size, L+(j-1)*size) > 0)
            {
                memcpy(temp, L+j*size, size);
                memcpy(L+j*size, L+(j-1)*size, size);
                memcpy(L+(j-1)*size, temp, size);
            }
        }
    }
    delete[] temp;
}


/**************************************************************
Modulname:     Vergleich
**************************************************************/

int Vergleich(const void *p1, const void *p2)
{
    char **A = (char**)p1;
    char **B = (char**)p2;

    return strcmp(*A, *B);
}

/**************************************************************
Modulname:            Hauptprogramm
Zweck:                Hier werden die Strings zuerst umsortiert
                    und danach werden sie sortiert ausgegeben!
**************************************************************/

void main()
{
    int i;
    char *name[5] =  {"Maier", "Roger", "Dekilla", "Mustafa", "Neon"};

    printf("----------------------------------------------\n");
    printf("Hier werden die Strings unsortiert ausgegeben\n");
    printf("----------------------------------------------\n");

    for (i=0; i<5; i++)
        printf("%s\n", name[i]);
        printf("\n\n");


    QSort_ab(name, 6, sizeof(char*), Vergleich);
    printf("----------------------------------------------\n");
    printf("Hier werden die Strings absteigend sortiert\n");
    printf("----------------------------------------------\n");

    for (i=0; i<5; i++)
        printf("%s\n", name[i]);
        printf("\n");


}




Es funktionier auch! Nur muss ich jetzt noch ein bsearch einbauen! Und hier hab ich wirkli NULL Ahnung!

Bitte um Hilfe
--
bUrToN RuLeZ
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
05.11.2005, 17:09 Uhr
virtual
Sexiest Bit alive
(Operator)


Funkioniert analog zu qsort.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
05.11.2005, 17:34 Uhr
burton



Wie meinst du das virtual?

Hast du da vll auch eine gute Page, wo Tipps drauf stehen!
Mfg
--
bUrToN RuLeZ
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
05.11.2005, 21:02 Uhr
virtual
Sexiest Bit alive
(Operator)


Waaas ist den das Problem? - Ich dachte immer, das eigentlich komplizierte an bsearch ist für die meisten, wie man den Zeiger auf die Funktion zum vergleichen übergibt. Aber das kennst Du ja nun schon.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
06.11.2005, 07:34 Uhr
burton



Ja ich weiß net wie man die Funktion schreibt? Das is mein Problem!
--
bUrToN RuLeZ
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
06.11.2005, 15:00 Uhr
burton



Also bsearch hab ich jetzt auch! Funktioniert super! Ich würde nur gern noch einen Zusatz haben, aber des funkt. net!

Also ich stell mal den Code der Funktion bsearch on, der funktioniert.:


C++:
char *suchen;
char *gesucht = "Karl";

    printf("----------------------------------------------\n");
    printf("Hier wird nach Namen gesucht\n");
    printf("----------------------------------------------\n");


    suchen = (char*) bsearch (&gesucht, name, 5, sizeof(char*), Vergleich);
    if (suchen!=NULL)
        printf ("%s wurde in der Liste gefunden!\n\n", gesucht);
    else
        printf("%s wurde nicht in der Liste nicht gefunden!\n\n", gesucht);



Jetzt würde ich gerne einen Namen eingeben können und nach dem soll gesucht werden! Würde ich also so machen:

C++:
char *suchen;
char *gesucht;

    printf("----------------------------------------------\n");
    printf("Hier wird nach Namen gesucht\n");
    printf("----------------------------------------------\n");
    printf("Nach welchen Namen soll gesucht werden?\n");
    printf("Name: ");
    scanf("%s", gesucht);

    suchen = (char*) bsearch (&gesucht, name, 5, sizeof(char*), Vergleich);
    if (suchen!=NULL)
        printf ("%s wurde in der Liste gefunden!\n\n", gesucht);
    else
        printf("%s wurde nicht in der Liste nicht gefunden!\n\n", gesucht);



Dieses funktioniert aber nicht! Könnte mir bitte einer oder eine einen Rat geben, wie das funktionieren könnte?
Mfg
--
bUrToN RuLeZ
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: