Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

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

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
18.10.2003, 08:30 Uhr
Spengergassler



Tach ihr!

Ich bräuchte dringends ein Quicksort, das eine zeichenkette text[z][s] richitg sortiert. Da ich jedoch noch nie was von einem Quicksort gehört habe, würde ich euch bitten mir ein solches zu schreiben, damit ich weiß wie ich es verwenden kann und in mein Programm einbauen kann.

Es ist wirklcih wichtig!

Danke schon im vorraus!

Lg SG
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
18.10.2003, 08:52 Uhr
(un)wissender
Niveauwart


Nimm, wenn du C programmierst qsort, sonst sort aus der STL.

Du meinst doch nicht im ernst, dass du hier Programme delegieren kannst, oder?
Nach dem Motto, macht mal, habe gerade keine Lust?
Wenn du Quicksort selber schreiben willst, google danach und zeig uns *deinen* Ansatz, dann sehen wir weiter.
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
18.10.2003, 09:07 Uhr
Spengergassler



MEIN Ansatz sieht wie folgt aus:


C++:
#include<stdio.h>
#include<conio.h>
void part(int[],int,int,int&);
void quick_s(int[],int);
void wechsel(int&,int&);
int main()
{
    printf("\n\n\t\t\t\tQuicksort\n\n\n");
    int zk[]={4,2,3,4,4,8,6,1,3,8,2};
    printf("Ungeordnet:\n");
    for(int p=0; p<11; p++){
        printf("   %d",zk[p]);
    }
    quick_s(zk,11);
    printf("\n\nGeordnet:\n");
    for(p=0;p<11;p++){
        printf("   %d",zk[p]);
    }
    getch();
    return 0;
}
void quick_s(int a[],int n)
{
    int ende;
    if(n<=1)
        return;
    part(a,n,n/2,ende);
    quick_s(a,ende);
    quick_s(&a[ende+1],n-ende-1);
}
void part(int a[],int n,int p,int&ende)
{
    wechsel(a[0],a[p]);
    ende=0;
    for(int i=1;i<n;i++)
        if(a[i]<a[0])
        {
            ende++;
            wechsel(a[i],a[ende]);
        }
    wechsel(a[0],a[ende]);
}
void wechsel(int&a,int&b)
{
    int h;
    h=b;
    b=a;
    a=h;
}




Und noch einmal um etwas klar zu stellen. Ich bin nicht zu faul dazu (sont hättte ich das oben stehende wohl kaum rausgefunden), jedoch habe ich zuvor noch nichts von Quicksort gehört! Da ich es aber in kürzester zeit selbst schreiben muss, wollte ich lediglich das ihr mich aufklährt, nach welchem Verfahren das vor sich geht. Da ich das nun in etwa weiß, hab ich jedoch große Probleme um es für char zeichenketten kompatibel zu machen!

Ich arbeite gerade daran, jedoch würdet es mir wirklich sehr weiterhelfen, wenn ihr mir einen kleinen hilfetipp geben könntet, da ich echt nicht weiß wie ich es machen soll, dass ich zeichenketten sortiern kann!

Danke, LG

edit by FloSoft: [ cpp ]-Tags eingefügt

Dieser Post wurde am 18.10.2003 um 09:27 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
18.10.2003, 09:09 Uhr
(un)wissender
Niveauwart


Kann da mal jemand cpp-Tags reinmachen?
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
18.10.2003, 09:10 Uhr
Spengergassler



### Text entfernt ###
Dieser Post wurde am 18.10.2003 um 09:27 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
18.10.2003, 09:18 Uhr
(un)wissender
Niveauwart


Da es ja wohl C sein soll, sind die Möglichkeiten begrenzt.
nimme das als Signatur:
void my_qsort(void *buf, size_t num, size_t blocksize, int (*compare) (const void*, const void *) ).

Wenn du nur nach eingebauten Regeln vergleichen willst, dann kannste die die compare-Funktion sparen.
Damit kannst du alle sortieren, ist die Signatur von qsort.

buf ist der Zeiger auf das Array.
num ist die Länge des Arrays(des verbleibenden!) in byte.
blocksize ist Größe des zu vergleichenden Blocks, bei int(32 bit) z.B 4(byte)

Weißt du wie qsort in der Theorie funktioniert?
Sonst googlen.
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
18.10.2003, 09:20 Uhr
(un)wissender
Niveauwart


Schau mal in der Hilfe nach cpp-Tags, dann haste sowas

C++:
//Mein toller C++-Code

--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
18.10.2003, 12:32 Uhr
Pablo
Supertux
(Operator)


wieso nimmt du nicht qsort von stdlib.h ?
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
18.10.2003, 13:07 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


in meinen anfängertagen habe ich mich auch mal mit sowas beschäftigt.
keine ahnung ob das hier überhaupt funktioniert. Hab das noch irgendwo aus meinen meinen alten quellcodes ausgegraben


C++:

void swap(double &a,double &e){a+=e; e=a-e; a-=e;}

void quickSort(int arrsize,double *arr){
int i=0,j=arrsize;
    if(arrsize>1){
    jump:    
        do{i++;}while((arr[i]<=*arr) && (i<j));
        do{j--;}while((arr[j]>*arr) && (j>=i));
        if(i<j){swap(arr[i],arr[j]);goto jump;}
        swap(arr[j],*arr);
        quickSort(j,arr);
        quickSort((arrsize-j-1),&(arr[j+1]));
    }
}


--
...fleißig wie zwei Weißbrote

Dieser Post wurde am 18.10.2003 um 13:13 Uhr von Windalf editiert.
 
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: