c++ wörter sortieren -bubblesort

aircoolguy

Cadet 3rd Year
Dabei seit
Apr. 2007
Beiträge
43
also ich will mit bubblesort wörter sortieren
das sortieren von zahlen rennt schon ::evillol:
Code:
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>


void bubblesort(int v[], int n) {

  for (int i = n - 1; i > 0; i--) {

    
    for (int j = 0; j < i; j++) {

      
      if (v[j] > v[j + 1]) {

      
        int swp = v[j];
        v[j] = v[j + 1];
        v[j + 1] = swp;
}
}
}
}

int main() {
  int values[] = {10, 9, 56, 235, 4, 8, 28, 11, 8 , 7, 6, 5, 4, 3, 2, 1, };
  int count = sizeof(values) / sizeof(*values);

  
  //for (int i = 0; i < count; i++) printf("%5d", values[i]);
 // printf("\n");

  
  bubblesort(values, count);

  
  for (int i = 0; i < count; i++) printf("%5d", values[i]);
  printf("\n");

  system("PAUSE");
  return(0);
  getchar();
}
wie kann ich nun wörter sortieren ( ascii code auslesen?-aber wie?)

thx
aircoolguy
 

Götterwind

Commander
Dabei seit
Apr. 2004
Beiträge
2.686
Tip: jedem Char kann eine Zahl zugeordnet werden. Also wäre 'a'+1='b'.

Du musst also den String in seine Bestandteile zerlegen und dann Schritt für Schritt untereinander vergleichen. Abzufangen wäre Groß und Kleinschreibung und unterschiedliche Wortlängen ;)
 

DragonIce

Commander
Dabei seit
Okt. 2006
Beiträge
2.585
Ich würde zuerst dein Bubblesort erstmal richtig machen.
Ich weiß zwar nicht wie das bei C++ ist aber eigentlich sollte die Methode nicht mit einem "Void" belegt sein, wenn sie aufgerufen werden soll und dann den Wert zurückgeben soll.
Code:
int bubblesort(int v[], int n) {
boolean vertauscht;
int swp;

do {
	vertauscht = false;
	for (int i = 0; i < n-1; i++) {
		if (v[i] > v[i + 1]) {
        		swp = v[i];
			v[i] = v[i + 1];
        		v[i + 1] = swp;
			vertauscht = true;
		}
	}
        n--;
} while vertauscht;
return v[];
}
Und in einer Schleife werden nie Variablen deklariert. C++ hat auch keinen Garbage Collector ;)
Was den weiteren Verlauf antrifft, schließe ich mich Götterwind an.
 
Zuletzt bearbeitet:

floschman

Banned
Dabei seit
Dez. 2006
Beiträge
6.488
Nutze einfach anstatt dem "<" Operator die strcmp funktion, die gibt dir 1,0,-1 zurück, je nach dem ob die Wörter größer , kleiner , gleich sind . ( Der ascii wert der bachstaben wird betrachtet )

Wenns viele Wörter werden, hier auf jeden Fall Bubble Sort durch Merge Sort \ Heap Sort, oder ähnliche n*log(n) Sortierungsalgortihmen erstzen.
 

aircoolguy

Cadet 3rd Year
Ersteller dieses Themas
Dabei seit
Apr. 2007
Beiträge
43
@Götterwind
also wenn die beiden wörter "abzocke" und "fehler" währen dann müsste ich a+1=b und a+2=c vergleichen oder wie?
@ DragonIce das versteh ich nicht - aber hauptsache meins funktioniert optiemieren kann man ja immer noch

wie ihr seht ist mein problem die idee in code zu stecken d.h. vielleicht könntet ihr mal ein beispiel machen - wär sehr nett

danke!

airc00lguy
 

Simpson474

Fleet Admiral
Dabei seit
Sep. 2006
Beiträge
12.654
Und in einer Schleife werden nie Variablen deklariert. C++ hat auch keinen Garbage Collector ;)
Schwachsinn!!! Du kannst natürlich deine Variablen in der Schleife deklarieren und dank heutiger Compiler wird der erzeugte Binärcode genau so aussehen, wie wenn die Variable vorher deklariert worden wäre. Außerdem wird diese Variable mit einer hohen Wahrscheinlichkeit nie im Arbeitsspeicher landen, sondern in den Prozessorregistern verweilen.

EDIT: Und am einfachsten gehts wirklich mit der strcmp Funktion. Falls du nicht zwischen Groß-/Kleinschreibung unterscheiden möchtest, dann gibt es noch die stricmp Funktion.
 

DragonIce

Commander
Dabei seit
Okt. 2006
Beiträge
2.585
@ aircoolguy -- Was verstehst du nicht?

@ Simpson474 -- Nein kein Schwachsinn. Selbstverständlich kann man es machen aber es ist absolut sinnbefreit weil sie jedes mal neu initialisiert wird. Das kostet unnötig Zeit und Ressourcen.
Außerdem hat das auch was mit einem sauberen Programmierstil zu tun
 
Zuletzt bearbeitet:

aircoolguy

Cadet 3rd Year
Ersteller dieses Themas
Dabei seit
Apr. 2007
Beiträge
43
es ist mir egal ob es lange dauert und recurcen frisst -hauptsache es kann mir ein par wörter ordenen

strcmp hört sich gut an - wie kann ich das ganze aber nun bei mir einbauen? Und wie gehe ich mit den zahlen die mir das ding zurückgibt um?

achja auf klein/gross sc***e ich
 

Simpson474

Fleet Admiral
Dabei seit
Sep. 2006
Beiträge
12.654
Falls du die Variable
Code:
int swp = ...
meinst, dann kostet keinerlei Zeit und Ressourcen. Außerdem finde ich es so den Code übersichtlicher, als wenn man die Variable am Anfang deklariert.

EDIT:

Mit der Zeile
Code:
if (v[j] > v[j + 1])
vergleichst du ja im Moment zwei Zahlen miteinander. Wenn jetzt das Array v Strings (Zeichenketten) enthält, dann ersetzt du die Zeile einfach durch
Code:
if(strcmp(v[j], v[j + 1] > 0))
 
Zuletzt bearbeitet:

DragonIce

Commander
Dabei seit
Okt. 2006
Beiträge
2.585
Bei dem was ich dir geschrieben habe, wird das gesamte Array{ v[] } sortiert(Sofern du das mit dem "strcmp " einfügst) zurückgegeben und du kannst damit alles anstellen. Kannst es ausgeben usw.

@ Simspon474 -- Dann wird die Variable aber immer noch nicht in der Schleife deklariert sondern davor
Code:
...
	[COLOR="Red"][B]int swp;	[/B][/COLOR]
for (int i = 0; i < n-1; i++) {

        if (v[i] > v[i + 1]) {
        ...
        }
 ....
}
...
 
Zuletzt bearbeitet:

Simpson474

Fleet Admiral
Dabei seit
Sep. 2006
Beiträge
12.654
Die Variable wird in der Schleife deklariert, genau wie im ersten Post von aircoolguy.
Außerdem ist dein zurückgegebenes Array kompletter Schwachsinn, da sowieso das Array, das als Parameter übergeben wird sortiert wird. Ruft er also seine Funktion auf
Code:
bubblesort(v, 10);
dann ist nach dem Funktionsaufruf das Array v sortiert, auch ohne Rückgabe.
 

DragonIce

Commander
Dabei seit
Okt. 2006
Beiträge
2.585
Welches er aber nicht im Rahmen der main-Funktion sortiert benutzen kann...
Deswegen ist es auch nur ein Parameter und keine für die Klasse gültige Variable ;)
Ansonsten wäre das return ja der größte Humbug seid es Programmierung gibt.
 

Simpson474

Fleet Admiral
Dabei seit
Sep. 2006
Beiträge
12.654
Er kann es natürlich in der main verwenden. Ich empfehle dir erst einmal ein C-Buch (am besten nicht C++ für den Anfang) zumindest bis zu den Zeigern zu lesen. Dann weißt du auch was seine Funktion macht.

Und wenn du es so willst, der return ist der größte Humbug seit es Programmierung gibt :D.
Es gibt natürlich auch Einsatzzwecke das ist ein return mehr geeignet als die Übergabe durch call by reference, aber in diesem Fall sicher nicht.
 

aircoolguy

Cadet 3rd Year
Ersteller dieses Themas
Dabei seit
Apr. 2007
Beiträge
43
ich hab jezt wie simpsons 474 sagte die zeilen vertauscht das bringt aber nur einen error muss ich dafür noch etwas includen?
 

Simpson474

Fleet Admiral
Dabei seit
Sep. 2006
Beiträge
12.654
Dein Funktionsheader sollte jetzt in etwa so aussehen:
Code:
void bubblesort(char *v[], int n) {
außerdem wirst du wahrscheinlich noch
Code:
#include <string.h>
brauchen.
 
Top