Problem mit Array befüllen
-
Ich war so freundlich, dir noch die Headerdateien oben einzubinden :p
-
mhm, darauf hät ich auch mal selber kommen können -.-
danke
-
Hallo, ich hätte noch eine weitere frage, in das programm soll eine bubblesort funktion eingebaut werden.
An letzter Stelle des Arrays soll die größte Zahl stehen und an erster die kleinste. Dies soll durch 2 in einander geschachtelte for-schleifen gelöst werden.
Hatte das Programm soweit, dass er nur die kleinste Zahl an erste stelle geschoben hat mittlerweile tut er das aber leider auch nicht mehr, sondern gibt entweder nur die gleiche zahl aus, oder irgendeine komische zahl die funktion sieht im moment so aus:int bubble(int array[z]){ int a,b,temp; for (a = 0 ; a < size; a++) { for (b = 1; b < size; b++) { if (array[a] > array[b]) { temp = array[a]; array[b] = array[a]; array[a] = temp; } } } for(z=0;z<size;z++) printf("%i",array[z] ); }
und wird folgendermaßen aufgerufen:
case 4: { printf("Welche der 3 Sortier Methoden möchten sie Benutzen?\n"); printf(" 1) Bubblesort\n"); printf(" 2) Shakersort\n"); printf(" 3) Insertionssort\n"); scanf("%d", &z); switch(z) { case 1: { printf("Bubblesort:\n"); bubble(array); }break;
ich hoffe ihr habt eine idee und könntet mir helfen
-
Ich helf dir etwas auf die Sprünge:
// im Kommentar ein Beispiel für die Zahlen 7 (array[a]) und 5 (array[b]) temp = array[a]; // temp = 7 array[b] = array[a]; // array[b] = 7 array[a] = temp; // array[a] = 7 // Die 5 verschwand hinter der Wand und wurde mit der 7 überschrieben :D
-
nein bitte nicht, das kann doch nicht ernsthaft der fehler sein-.-
vielen dank, werde mich gleich wieder dran setzen und sonst nochmal melden ^^
danke für diene hilfe!!
-
hab das jetzt geändert, aber wieso zum teufeln schiebt er denn nur die kleinste zahl nach ganz links und lässt den rest einfach so bestehen?
er müsste doch eigentlich immer weiter nach vorne wandern und die zaheln vertauschen??
-
#include <stdio.h> void bubblesort(int *array, int length) { int i, j; for (i = 0; i < length; ++i) { for (j = 0; j < length - i - 1; ++j) { if (array[j] > array[j + 1]) { int tmp = array[j]; array[j] = array[j + 1]; array[j + 1] = tmp; } } } } int main() { int arr[] = {5,3,6,7,8,2,3}; bubblesort(arr, sizeof(arr)/sizeof(int)); for(int i=0; i < sizeof(arr)/sizeof(int); ++i){ printf("%i",arr[i]); } return 0; }
-
Danke, genau den Code habe ich auch gefunden,
hab ihn auf meine variablen umgeschrieben und naja...
er setzt halt nur die höchste zahl ein letzte stelle, mehr aber auch nicht, der rest verschiebt sich einfach auf links
das kann doch eigentlich garnicht sein?int r, z; int s; int size=0; int *array = NULL; void bubble(int array[z], int size) { int a, b,temp; for (a = 0; a < size; a++) { for (b = 0; b < size; b++) { if (array[a] > array[a + 1]) { int temp = array[a]; array[a] = array[a + 1]; array[a + 1] = temp; } } } }
so hab ich die funktion geschrieben und dann ruf ich sie später folgendermaßen auf:
switch(z) { case 1: { printf("Bubblesort:\n"); bubble(array,size); }break;
-
Stichpunkt Arraygrenzen
for (a = 0; a < size; a++) { for (b = 0; b < size; b++) { if (array[a] > array[a + 1]) { |____| | | Was ergibt das wohl, wenn a im letzten Schleifendurchlauf ist
-
Naja, wenn ich den Array größe 8 gesetzt hätte, würde da 9 stehen und da es keinen Wert 9 gibt kann er auch schlecht mit einem Wert vergleichen
meine idee wäre, das ganze so zu schreiben:bubble(int array[z], int size) { int a, b,temp; for (a = 0; a < size; a++) { for (b = 1; b < size; b++) { if (array[a] > array[b]) { int temp = array[b]; array[b] = array[a]; array[a] = temp; } } } for(z=0;z<size;z++){ printf("%i ",array[z] ); } }
Doch auch das führt mich aufs selbe problem zurück
-
PlaZm0 schrieb:
er setzt halt nur die höchste zahl ein letzte stelle, mehr aber auch nicht, der rest verschiebt sich einfach auf links
das kann doch eigentlich garnicht sein?void bubble(int array[z], int size) { int a, b,temp; for (a = 0; a < size; a++) { for (b = 0; b < size; b++) { if (array[a] > array[a + 1]) { int temp = array[a]; array[a] = array[a + 1]; array[a + 1] = temp; } } } }
Weil du "size -i -1" schreiben musst, damit er das letzte Element nicht mehr mitsortiert... außerdem deklarierst du temp 2 mal. Du solltest dir die vorherigen Posts genauer anschauen, weil dort siehst du was du falsch machst.
-
oh man, das ist mir jetzt glatt ien bisschen peinlich, hab den code bei mir im programm echt total falsch zusammengebastelt, was sehen sich j und i auch so verdammt ähnlich :S
Gut dass du es mir nochmal so gesagt hast, hab dann nochmal genauer hingeguckt
Vielen Vielden Dank!!!
Ihr habt mir echt RIESIG geholfen :D!!!
glaub jetzt hab ich auch fast alles zusammen ^^