Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Maxsort (Funktioniert erst wenns viele Zahlen sind)

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 < [ 2 ]
000
18.04.2004, 19:09 Uhr
Sloth



Hi!
Ich hab n echtes Problem, ich soll in C ein Sotier-Algo schreiben. Das meiste Funktioniert auch. Aber ein Teil der Aufgabe eben nicht und das läßt mich langsam durchdrehen, ich hab jetzt Maxsort fertig, nur leider fuinktioniert er erst, wenn ich zimlichviele zahlen zum sotieren hab. Teilwesie gehts auch bei 5. Die Funkrion sieht bisher so aus:

C++:
int maxsort(int zahlen[])
{
    int lang =0, max = 0, z=0,n=1;
    lang = zahlen[5000];    

    for (; n< lang ; n++)
    {
        for (; z < lang - n; z++)
            if (zahlen[z] > zahlen[max]) max  = z;
            tausche(zahlen, max, lang -n);
            z=0;
    }
    zahlen[5001] = 3;
    return 0;
}



Hat jemand ne lösung woran es liegt das er erst sotiert, wenn ich viele zahlen zum sotieren hab? das ist echt unlogisch. Bitte helft mir, thx b4

[edit Pablo]
CPP tags gesetzt
[/cpp]

Dieser Post wurde am 18.04.2004 um 19:34 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
18.04.2004, 19:37 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


öhm sag doch mal wie genau dein maxsort(den begriff maxsort kenn ich so nicht) funktionieren soll... also wie soll der algo genau ablaufen.

irgendwie sieht das für mich aus wie ein verunglückter selectionsort...
--
...fleißig wie zwei Weißbrote

Dieser Post wurde am 18.04.2004 um 19:38 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
18.04.2004, 19:37 Uhr
kronos
Quotenfisch
(Operator)


hi!
was mir auf den ersten blick auffältt:
wenn zahlen unter 5002 elemente hat, schiesst zahlen[5001] in's leere, das gibt dann mir großer wahrscheinlichkeit 'ne speicherzugriffsrechtsverletzungsbedingte funktionsstörung...
--
main($)??<-$<='?'>>2?main($-!!putchar(
(("$;99M?GD??(??/x0d??/a:???;a"+'?'/4)
??($??)+'?'/3-2-1+$%2)??''?')):'?';??>
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
18.04.2004, 19:43 Uhr
Sloth



Der soll sich die größte Zahl raus suchen und gegen die letze tauschen, dannach die zweit größte zahl gegen die vorletzte tauschen usw.
Am speicher liegst nicht es ist 5002 groß, also geht 5001 noch grade ;-)

ich weiß nicht, ist das kein Maxsort? Mir wurde das als Maxsort erklärt.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
18.04.2004, 20:21 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


hmm also wenn ichs richtig vestanden habe soll das quasi ein selction sort sein wo man nur umgekehrt anfängt zu sortieren...

das würd ich auf die schnelle so machen


C++:
void swap(int *a,int *b){int x=*a;*a=*b;*b=x;}

void array_ausgeben(int *a,int n){for(int i=0;i<n;++i)printf("%d\t",a[i]);printf("\n");}

void maxsort(int *a,int n){
int *max,i,j;
    for(i=0;i<n-1;++i){
        for(j=1,max=a;j<n-i;++j)
            if(*max<a[j])max=&a[j];
        swap(max,&a[n-i-1]);
    }
}

int main(){
int n=6,a[]={5,9,6,8,4,3};
array_ausgeben(a,n);
maxsort(a,n);
array_ausgeben(a,n);
}


--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
18.04.2004, 20:47 Uhr
Sloth



Erst mal danke für die schnellen antworten, aber ich bekomm deinen Code garnicht bei mir eingebaut. Geht das ganze auch etwas einfacher ohne die adressen der Felder?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
18.04.2004, 20:49 Uhr
Sloth



Erkennst du den einen Fehler in dem Code von mir? ich finde ihn zimlich logisch. Was mich vorallem wundert ist das er funktioniert wenn es viele zahlen sind aber fehler macht wenns nur wenige sind!?!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
18.04.2004, 20:51 Uhr
kronos
Quotenfisch
(Operator)


ohne addressen? wie sind denn deine tauschen() aus?
--
main($)??<-$<='?'>>2?main($-!!putchar(
(("$;99M?GD??(??/x0d??/a:???;a"+'?'/4)
??($??)+'?'/3-2-1+$%2)??''?')):'?';??>
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
18.04.2004, 21:04 Uhr
Sloth



Ich tausch einfach den inhalt der Felder, ohne mich mit den * und & zu belasten. Geht das nicht so wie ich den Code bis her hab, nur n bisschen abgändert? Das Problem ist das ich mein Programm auch verstehen möchte.


C++:
int tausche(int zahlen[], int a, int b)
{
    int tausch =0;
    tausch = zahlen[a];
    zahlen[a] = zahlen[b];
    zahlen[b] = tausch;
    return 0;
}



Meint ihr es bringt was wenn ich das ganze Programm poste? Ist allerdings n bischen läneger.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
18.04.2004, 22:09 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


das tausch sieht ja schon mal übel aus
wenn schon so...
dann doch bitte so

C++:
void tausche(int zahlen[], int a, int b){
    int tausch = zahlen[a];
    zahlen[a] = zahlen[b];
    zahlen[b] = tausch;
}






Bearbeitung:

ach so sa so übel aus weil das forum mal wieder die klammern geschluckt hat
muss mal bitte ein mod richten... danke


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

Dieser Post wurde am 18.04.2004 um 22:10 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ 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: