funktion bubblesort
-
Hallo
bin noch Anfänger in c++.
habe folgende Funktion geschrieben.void bubblesort()
{
bool bend=false;
for(int i=0;i<5;i++) if(izahl[i+1]<izahl[i])
{
swap(izahl[i+1],izahl[i]);
bend=true;
}
if(bend) bubblesort();
}
funktioniert auch einwandfrei, aber ich möchte die Funktion variabler gestalten. Das heißt ohne globale Variablen. Da ich aber kein Arrayfeld übergeben kann, muß ich wohl mit Zeigern arbeiten oder ?
In der Funktion dann ein dynamisches Array ist auch klar.
Wie muss ich das nun anstellen mit Zeigern ? (oder gibt es noch ne bessere möglichkeit ?)
-
Original erstellt von <Stefan>:
**funktioniert auch einwandfrei, aber ich möchte die Funktion variabler gestalten. Das heißt ohne globale Variablen. Da ich aber kein Arrayfeld übergeben kann, muß ich wohl mit Zeigern arbeiten oder ?
**Wer sagt, dass das nicht geht?
-
Wie kann ich ein Array an eine Funktion übergeben und zurückgeben ?
-
#include <stdio.h> void b(int a[], int size) { for (int i = 0; i < size; i++) printf("%d\n", a[i]); } int main() { int a[7] = {1, 2, 3, 4, 5, 6, 7}; b(a, 7); return 0; }
-
void bubblesort( int* izahl, int groesse ) { bool bend=false; for(int i=0;i<groesse;i++) if(izahl[i+1]<izahl[i]) { swap(izahl[i+1],izahl[i]); bend=true; } if(bend) bubblesort(); } int main() { ... int groesse = 5; int array[GROESSE]; bubblesort( array ); }
-
So einfach geht das ?
schäme mich für meine noch unwissenheit. :p
Danke.
-
Original erstellt von entelechie:
*```cpp
void bubblesort( int izahl, int groesse )
{
bool bend=false;
for(int i=0;i<groesse;i++)
if(izahl[i+1]<izahl[i])
{
swap(izahl[i+1],izahl[i]);
bend=true;
}
if(bend) bubblesort();
}int main()
{
...
int groesse = 5;
int array[GROESSE];
bubblesort( array );
}Willst du nicht wenigstens in ienem von beiden aufrufen bubblesort mit dem richtigen parametern füttren?
-
upps.
sorry hatte das wohl uebersehen, aber ich denke
da prinzip mit der uebergabe von feldern ist trotzdem
klar geworden.
-
Jetzt bleibt nur noch die Frage der Rückgabe des Arrayfeldes.
Funktioniert leider nicht mitreturn izahl[];
Geht die Rückgabe von Arrays auch ?
-
Original erstellt von <Stefan>:
**Jetzt bleibt nur noch die Frage der Rückgabe des Arrayfeldes.
Funktioniert leider nicht mitreturn izahl[];
Geht die Rückgabe von Arrays auch ?**
Jein. Du kannst keien Lokalen Varibalen zurückgeben, sondenr musst was per malloc allozieren und Zeiger nutzen. Z.B. so:
#include <stdio.h> #include <stdlib.h> int *foo() { int *b = (int *)malloc(sizeof(int) * 3); b[0] = 1; b[1] = 2; b[2] = 3; return b; } int main() { int *bar = foo(); for (int i = 0; i < 3; i++) printf("%d\n", bar[i]); }
-
Hi Stefan,
wollte nur nachfragen, ob das mit der Array-Rückgabe eine
allgemeine Frage war, oder sich auf dein Problem bezog?In dem angegebenen Bubbelsort musst du nämlich kein
Array zurückgeben, die Änderungen bleiben
"aussen" erhalten.Jockel
-
Die Funktion wollte ich dementsprechend umbauen, das man ein unsortiertes Arrayfeld an die Funktion übergibt und entsprechend ein sortiertes Feld zurückgibt. Die Angegebene Funktion benutzt wie schon bemerkt globale Variablen.
-
Du musst überlegen ob du mit callbyvalue oder mit callbyreference arbeitest denn im falle callbyreference brauchst du das Array nicht zurückzugeben denn es wird direkt von der Funktion bearbeitet.
CallByValue -> Übergabe des Wertes an eine Funktion und in der Funktion wird mit einer Wertekopie gearbeitet. Das bedeutet, die Werte werden zwar verändert aber sobald die Funktion verlassen wird sind sie auch wieder weg.
CallByRefernce -> Übergabe der Referenz an die Funktion und die Werte werden direkt bearbeitet. Nachdem die Funktion erfolgreich ausgeführt wurde, befindet sich das Array im sortierten (solange die Funktion richtig ist) Zustand. Demnach brauchst du bei dieser Methode keine Rückgabe.Beachte aber bei Multithreading Applikationen muss du mit CallByRefernce aufpassen....!
Gruss
-
Wie übergibt man denn ein Array per Value ?!?
JOckel
-
interessante frage
-
gar nicht
-
Hi,
nur sind immer noch etliche Fehler im Quellcode
So könnte eine Lösung sein;#include <stdio.h> #include <stdlib.h> #define bool unsigned int //in C gibt es keine bool-Typen #define false 0 //in C gibt es kein true oder false #define true 1 void swap (int * a, int * b) //call by reference, sonst kein Tausch { int temp; temp=*a; *a=*b; *b=temp; } void bubblesort( int* izahl, int groesse) { bool bend=false; int i=0; for(i=0;i<groesse;i++) if(izahl[i+1]<izahl[i]) { swap(&izahl[i+1],&izahl[i]); //call by reference bend=true; } if(bend)bubblesort(izahl,groesse); //Liste unvollständig } int main() { int groesse = 7,i; int array[]={99,-4,12,77,33,44,3}; bubblesort( array ,groesse); //falscher Aufruf for (i=0;i<groesse;i++) printf("%d ",array[i]); system("pause"); }
-
Habs hinbekommen.
#include <conio.h> #include <iostream.h> int *bubblesort(int izahlen[],int ilaenge); void main() { int ilaenge=6; int izahlen[6]={5,7,2,9,1,8}; int *pzahlen=izahlen; pzahlen = bubblesort(izahlen,ilaenge); for(int i=0;i<6;i++) cout << izahlen[i] << " "; getch(); } int *bubblesort(int izahlen[],int ilaenge) { bool bend=false; for(int i=0;i<ilaenge-1;i++) if(izahlen[i+1]<izahlen[i]) { swap(izahlen[i+1],izahlen[i]); bend=true; } if(bend) bubblesort(izahlen,ilaenge); int *pzurueck=izahlen; return pzurueck; }
-
Ich hab auch mal'n Bubblesort geschrieben:
void bubblesort(int arr[], int n) { int i=0, j, swapTmp; for(i; i<n-1; ++i) { for(j=n-1; j>i; --j) { if(arr[j-1]>arr[j]) { swapTmp=arr[j-1]; arr[j-1]=arr[j]; arr[j]=swapTmp; } } } }
Supa, oder? Fehler bitte posten...
[ Dieser Beitrag wurde am 16.05.2003 um 17:24 Uhr von MaSTaH editiert. ]
-
Hi Stefan,
so bestimmt nicht !!!
Was ist swap()???
Erhältst du die Werte wirklich (ge-)swap(-ed)??????Warum einen int-Pointer zurückgeben, wenn du ein Array übergibst??
so ist das jedenfalls Müll.
mfg
pierre