bubblesort ohne Zaehlvariablen nur mit Zeigern?
-
Hi!
Weiß einer wie man das ungefähr umsetzen kann?
Bin da völlig ratlos
lg
-
Um es mal genauer zu fragen:
sagt mal wie kann ich diesen Ausschnitt(bubblesort)
ohne die Zählvariablen(i,j) schreiben,
wenn ich nur Pointer *pointeri,*pointerj
gegeben habe?if (folge[j] > folge[j+1]) { // Tauschen der Zahlen feld[j] mit feld[j+1] h = folge[j]; folge[j] = folge[j+1]; folge[j+1] = h; getauscht = true;
-
if (folge[j] > folge[j+1]) { h = folge[j]; folge[j] = folge[j+1]; folge[j+1] = h; getauscht = true;
-
Du wendest halt statt den Indizes Zeiger an.
folge[j]wäre dannpointerj. Mit Zeigerarithmetik (Operatoren+,-,++,--) und Dereferenzierung (Operator*) kannst du das Gleiche erreichen.Übrigens würde ich für das Tauschen entweder
std::swap()verwenden oder eine eigene Funktion schreiben, die die Inhalte zweier Zeiger vertauscht.P.S.: In Zukunft bitte [cpp]-Tags verwenden...

-
also hab das mal versucht,bin aber ein bissl ratlos.
Komme mit den Pointern ganz durcheinander
Kannst vielleicht mal drüber gucken?[cpp]
#include <iostream>
using namespace std;int main() {
int folge[8] = { 12, 55, 14, 17, 31, 33, 22, 41 };
int h;
int *pointeri, *pointerj, *pointerk;
for(pointeri = folge+7; pointeri >= folge+1; pointeri--)
{
getauscht = false;for(pointerj = 0;pointerj < pointeri; pointerj++)
{
if (*pointeri > *(pointeri+1))
{h = *pointerj;
*pointerj = *(pointerj+1);
*(pointerj+1)= h;
getauscht = true;if (!getauscht) break;
else
{
for(pointerk = 0;pointerk < folge+7; pointerk++) cout << *pointerk << " ";
cout << endl;
}return 0;
}
-
#include <iostream> using namespace std; int main() { int folge[8] = { 12, 55, 14, 17, 31, 33, 22, 41 }; int h; int *pointeri, *pointerj, *pointerk; for(pointeri = folge+7; pointeri >= folge+1; pointeri--) { getauscht = false; for(pointerj = 0;pointerj < pointeri; pointerj++) { if (*pointeri > *(pointeri+1)) { h = *pointerj; *pointerj = *(pointerj+1); *(pointerj+1)= h; getauscht = true; if (!getauscht) break; else { for(pointerk = 0;pointerk < folge+7; pointerk++) cout << *pointerk << " "; cout << endl; } return 0; }
-
Ich nehm' mal an, du bist auch an der MLU und musst die Aufgabe bis morgen 23:59 eingeschickt haben ^^
Was kommt bei dir für'ne Ausgabe? Hab's fast genauso, nur in der for-Schleife ptrj = folge bzw. dann ptrk = folge..
Aber es kommt einfach keine Ausgabe...weiss auch nicht weiter grade
-
Ok, hab' es jetzt doch hinbekommen, hatte nur 2 Klammern vergessen

-
#include <iostream> using namespace std; int main() { int folge[8] = { 12, 55, 14, 17, 31, 33, 22, 41 }; int h; int *pointeri, *pointerj, *pointerk; for(pointeri = folge+7; pointeri >= folge+1; pointeri--) { getauscht = false; for(pointerj = folge -1 ;pointerj < pointeri; pointerj++) { if (*pointeri > *(pointeri+1)) { h = *pointerj; *pointerj = *(pointerj+1); *(pointerj+1)= h; getauscht = true; if (!getauscht) break; else { for(pointerk = folge ;pointerk < folge+7; pointerk++) cout << *pointerk << " "; cout << endl; } return 0; }so müsste es stimmen
-
FoxM schrieb:
#include <iostream> using namespace std; int main() { int folge[8] = { 12, 55, 14, 17, 31, 33, 22, 41 }; int h; int *pointeri, *pointerj, *pointerk; for(pointeri = folge+7; pointeri >= folge+1; pointeri--) { getauscht = false; for(pointerj = folge;pointerj < pointeri; pointerj++) { if (*pointeri > *(pointeri+1)) { h = *pointerj; *pointerj = *(pointerj+1); *(pointerj+1)= h; getauscht = true; if (!getauscht) break; else { for(pointerk = folge ;pointerk < folge+7; pointerk++) cout << *pointerk << " "; cout << endl; } return 0; }so müsste es stimmen
Nee, so is' richtig

-
kk,vielen dank

Saß da irgendwie fest und kam nicht weiter.
Richtig, die MLU ist überall