Zahlen in ARRAY Sortieren

Status
Nicht offen für weitere Antworten.

tanjaHS

Mitglied
Hi Leute ich habe hier ein Programm das Zahlen die in einem Array stehen sortieren soll, nach folgender Art.
Nehmen wir an wir haben |9, 5, 4, 3, 1, 8| hier sollen wir nun die größte und die kleinste Zahl bestimmen. Die kleinste ganz rechts und die größte ganz links. Dann werden die sortierten nicht mehr betrachtet und man nimmt die sotierte folge 1 | 5, 4, 3, 8, | 9 jetzt wird im 2ten Schleifenlauf die Zahlen 5, 4, 3, 8 sortiert usw. Ich habe den ersten Schritte geschafft aber mir fehlt die Idee, wie ich die darauf folgenden Schritte realisieren kann, jemand eine Idee ? Meine IDEE mit y ist im CODE beschrieben, aber funktioniert nicht. Bitte um ideen.DANKE

Code:
static void Sort(int[] array){
		// Hilfvariablen
		int lowerBound = array[0];
		int upperBound = array[0];
		int x = 0, y = 0, z = 0, buffer = 0, buffer2 = 0;

		//wird solange Ausgeführt wie das Array groß ist
		while(x < array.length){

y wird auf 0 gesetzt und i=y so kann man beim nächsten Schleifendurchlauf von while
dass array an der stelle [0] auslassen weil y=1 und i=y -> = 1, dadurch wird beim
ersten durchlauf die 1 und 9 sotiert und wenn i=1 ist, dann sind die Grenzen für den 2ten
Durchlauf gesetzt - > ab array[1] bis array[array.lenght-1-z] z=1


Code:
			for(int i=y; i<array.length-z; i++){
				if(lowerBound > array[i]){
					lowerBound = array[i];
				}
				if (upperBound < array[i]){
					upperBound = array[i];
				}
			}
/* kopiervorgang, dieser soll nur einmal ausgeführt werden deshalb j = 0 und dann j++
* -> j!=0 Schleifenabbruch*/

Code:
			for(int i=y; i<array.length-z; i++){
				int j = 0;
				if(j==0 && array[i] == lowerBound){
					buffer = array[0];
					array[0] = lowerBound;
					buffer2 = array[array.length-1];
					array[i] = buffer2;
					//println("Buffer: "+buffer);
					array[array.length-1] = buffer;
				}
				j++;
			}
			x++;
			y++;
                        z++;
		}
	}

	public static void main(String[] args) {
		//initializing the array
		int[] array = {9, 5, 4, 3, 1, 8};
		Sort(array);
	}
 
S

SlaterB

Gast
wenn x bis array.length läuft und immer um 1 erhöht wird, warum dann eine while-Schleife und keine deutlichere for-Schleife?

fünf namenlose Variablen x, y, z, i, j sind ein unverständliches Durcheinander,
da x, y und z gleichförmig erhöht werden, haben sie zu jedem Zeitpunkt den gleichen Inhalt, da reicht doch eine Variable?

wieso dieser komische Kopiervorgang, der nur einmal durchgeführt werden soll, mit der seltsamen i/j-Konstruktion?
gehts nicht GANZ OHNE SCHLEIFE auch genau einmal?


du brauchst:
Code:
for-i-Schleife bis zur Hälfte des Arrays {

   for-j-Schleife, die erst bei Position i anfängt und bis bis length-i läuft, hast du ja schon einigermaßen {
       lowerBound + upperBound bestimmen + deren Indexe im Array
   }

   ohne Schleife die Grenzwerte an den Rand des Arrays setzen,
   die dortigen Werte auf die vorherigen Positionen von upper + lower,
   deshalb musst du dir auch die Indexe im Array merken,

}
 

tanjaHS

Mitglied
ja das muss so gelöst werden, so ist die Aufgabenstellung. Das mit den überflüssigen Variablen stimmt. Der Kopiervorgang deshalb, weil ich ja lower und upper verschieben muss, deshalb muss ich sie vorher irgendwo hin speichern.

Wenn beim ersten mal i = 0 ist startet das Array von 0 und endet beim letzten Array und beim zweiten durchlauf wird i um 1 erhöht nun heisst es array[0] wird ausgelassen und läuft bis array.lenght-1, das war meine Idee, aber wie gesagt klappt nicht.
 

hdi

Top Contributor
Puh... also ich hab das jetz mal gemacht. Hab fast 2 Stunden gebraucht, ist immer wieder erstaunlich wie
schwer sowas eigentlich ist (oder ich tu mich nur so schwer).

Wie immer gibt es sicherlich bessere Lösungen. Ich habe gewisse Print-Meldungen eingebaut, damit du
das mal an einem Beispiel aufrufen kannst, und verstehst, wie das funktioniert.

Und in diesem Zuge siehst du vllt noch Dinge, die man besser machen kann, und schreibst die Funktion selber
nochmal besser!

Hier der Code, die Methode returned dir das übergebene Array als sortiertes Array. Das kannst du ja dann
in einer Schleife element-weise auslesen.

Code:
private static int[] sort(int[] array) {

		// das wird am ende das sortierte array
		int[] sorted = new int[array.length];

		// diese zahlen geben die stellen an, an die wir in das sorted-array
		// im jedem schleifendurchlauf die werte einfüllen. mir machen es von
		// aussen nach innen, d.h. der erste min-wert kommt an den anfang,
		// der erste max wert ganz an das Ende, danach 2. und vorletzte Stelle,
		// usw.
		int beginIndex = 0;
		int endIndex = array.length - 1;

		// zu sortierendes array durchlaufen
		// (immer wenn wir das max und min haben, nehmen wir diese werte raus
		// und schrumpfen das array
		while (array.length > 0) {
			System.out.println("NEUER SCHLEIFENDURCHLAUF - Länge des Arrays: "
					+ array.length);
			int max = 0;
			int min = array[0]; // einfach mal der erstbeste Wert
			// wir speichern auch die stelle des min/max ab, nicht nur den wert,
			// weil das min/max auch öfters vorkommen könnte.
			int maxIndex = 0;
			int minIndex = 0;
			for (int i = 0; i < array.length; i++) {
				// falls dieser wert > max, max updaten:
				if (array[i] > max) {
					max = array[i];
					maxIndex = i;
				}
				// analog zu max
				if (array[i] < min) {
					min = array[i];
					minIndex = i;
				}
			}
			System.out.println("max: " + max + " (index " + maxIndex + ")");
			System.out.println("min: " + min + " (index " + minIndex + ")");
		        // das min/max dieses durchlaufs in unser sorted-array einfügen
			// und den platz der nächsten werte neu setzen:
			sorted[beginIndex] = min;
			sorted[endIndex] = max;
			beginIndex++;
			endIndex--;

			// array durch neues array ohne diese zwei werte ersetzen:
			if (array.length > 1) {
				int[] temp = new int[array.length - 2];
				int tempIndex = 0;
				System.out.println("Erstelle neues Array ohne min/max:");
				for (int i = 0; i < array.length; i++) {
					boolean skip = false;
					// wenn wir beim min/max sind, überspringen wir es, d.h. wir
					// kopieren den wert nicht in unser neues array:
					if (i == minIndex || i == maxIndex) {
						System.out.println("skipping: " + array[i]);
						skip = true;
					}
					if (!skip) {
						System.out.println("kopiere: " + array[i]);
						// weder max noch min, d.h. das brauchen wir noch für
						// den
						// nächsten schleifendurchlauf:
						temp[tempIndex] = array[i];
						tempIndex++;
						skip = false;
					}
				}
				// array updaten (ist jetzt das array ohne das min/max dieses
				// durchlaufs):
				array = temp;
			}
			// hier kommen wir an, falls das array eine ungerade anzahl von
			// elementen
			// hatte, und nun nur noch eins übrig ist. Dann müssen wir natürlich
			// nix mehr
			// kopieren und aussortieren, das letzte element wurde oben ja schon
			// in das
			// sorted-array eingefügt. wir sind also fertig!
			else {
				break;
			}
		}
		return sorted;
}
 
S

SlaterB

Gast
zum Ausgleich des Code-Verratens ist es immerhin eine unnötig komplizierte Variante
 

hdi

Top Contributor
Naja ich hab ja drauf hingewiesen dass die Thread Erstellerin das verstehen soll, nich nur copy n paste.

Kann man das mit Arrays noch sehr viel besser machen? Ich meine, ohne ArrayList, Maps etc. Ich denke nämlich
nicht dass sowas verwendet werden darf. Würde mich interessieren, weil ich find's selber auch etwas schlecht,
dass ich so verdammt lange brauche um das fehlerfrei hinzukriegen, auch wenn ichs mit Absicht nur mit normalen
Arrays mach..
 
S

SlaterB

Gast
ich habe eine Variante halb vorgegeben, es reicht, innerhalb des vorhandenen Arrays zu agieren,
die sortierten Werte an den Rand drücken und dann nur im inneren Teil des Arrays weitermachen,

ist zwar bisschen Gefummel mit den Indexen, aber beim Erstellen des neuen Arrays auch nicht leichter,

Maps und Listen brauch man da nicht, nein
 

hdi

Top Contributor
Ja, ich hatte das auch erst ohne temporäres Array versucht, aber an dieser Stelle:

...ohne Schleife die Grenzwerte an den Rand des Arrays setzen,
die dortigen Werte auf die vorherigen Positionen von upper + lower...

...gabs plötzlich n Problem, denn das ganze haut nicht mehr so unkompliziert hin,
wenn upper+lower selber schon zufällig an den Rändern des Arrays liegen! Das alleine könnte
man per simpler if-Abfrage testen, aber dann kommt noch das Problem, das dein Array so aussehen könnte:

{ 1,1,1,1,4,9}

oder ich hab grad ne Blockade... Zumindest gabs beim Test verschiedener Arrays manchmal Probleme,
dann hab ichs eben mit dem Kopieren des arrays gemacht.
 
S

SlaterB

Gast
man vertauscht in Runde 1 array[0] mit array[lowerIndex],
völlig egal ob lowerIndex gerade auch 0 ist oder einer der anderen,
da brauch man kein if,

---

in
> { 1,1,1,1,4,9}
sehe ich keine Blockade,

vielleicht passiert bei allem Vertauschen nix, aber das ist ja kein Nachteil
 

tanjaHS

Mitglied
man vertauscht in Runde 1 array[0] mit array[lowerIndex],
völlig egal ob lowerIndex gerade auch 0 ist oder einer der anderen,
da brauch man kein if,

ja das stimmt und das gilt auch für upperIndex. Naja ich schick das mal meinen Prof. mal schauen ob er meinen Fehler im Code findet, aber ich danke euch recht herzlich.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
L Java Int-Array, Zahlen sortieren Java Basics - Anfänger-Themen 8
B Zufällige Zahlen in Array sortieren Java Basics - Anfänger-Themen 18
D Array nach ungerade zahlen sortieren Java Basics - Anfänger-Themen 6
A Sortieren von Zahlen in einem Array Java Basics - Anfänger-Themen 13
I Zahlen in Array schreiben und dann sortieren Java Basics - Anfänger-Themen 7
onlyxlia Anzahl Random Zahlen mit Scanner abfragen und in Array speichern Java Basics - Anfänger-Themen 10
Ü Java Array - Buchstaben als Zahlen ausgeben Java Basics - Anfänger-Themen 22
XWing Doppelte Zahlen im Array Java Basics - Anfänger-Themen 8
O Zahlen aus einem char-array per char + Zeichen addieren Java Basics - Anfänger-Themen 2
T Methode, die prüft ob in einem Int-Array maximal 2 Zahlen enthalten sind, die größer als ihr Vorgänger sind Java Basics - Anfänger-Themen 5
padde479 Array Multiplikation der ersten n Zahlen Java Basics - Anfänger-Themen 7
00111010101 Objektorientiertes Programmieren mit Vererbung (Zahlen in Array verschwinden) Java Basics - Anfänger-Themen 3
P Zweidimensionales Array als Tabelle mit befüllten Zahlen Java Basics - Anfänger-Themen 10
emx-zee Erste Schritte NullPointerException, Array mit zufälligen Zahlen füllen Java Basics - Anfänger-Themen 2
B Häufigkeit einzelner Zahlen in einem Array Java Basics - Anfänger-Themen 6
H Eingegebene Zahlen mit Array ausgeben Java Basics - Anfänger-Themen 18
R Array mit Unter- und Obergrenze ganze Zahlen dazwischen erscheinen nicht Java Basics - Anfänger-Themen 1
P Nutzer entscheiden lassen, wie viele Zahlen dieser in ein Array eingeben möchte. Java Basics - Anfänger-Themen 6
E Zahlen von einem Array mit zahlen von zweitem Array vergleichen Java Basics - Anfänger-Themen 27
Moji Klassen Array Zahlen zu Sternchen (U-Helmich 7.1-4) Java Basics - Anfänger-Themen 5
A Ein Array mit zufälligen Zahlen füllen Java Basics - Anfänger-Themen 4
F Zahlen aus Datei einlesen und in Array speichern Java Basics - Anfänger-Themen 2
H Array mit Zahlen die durch 3 und 5 teilbar sind erstellen Java Basics - Anfänger-Themen 13
B Array via Schleife mit ungeraden bzw geraden Zahlen füllen Java Basics - Anfänger-Themen 7
O Array nach gleichen Zahlen prüfen und ausgeben Java Basics - Anfänger-Themen 6
J jOptionPane, Array und negative Zahlen Java Basics - Anfänger-Themen 2
H überprüfen ob in Array gleiche int-Zahlen gespeichert werden. Java Basics - Anfänger-Themen 7
T Lotto Zahlen in Array speichern Java Basics - Anfänger-Themen 2
W Erste Schritte Zweidimensionales Array - Gerade Zahlen anzeigen lassen Java Basics - Anfänger-Themen 3
B Methoden Array mit zufälligen Zahlen füllen Java Basics - Anfänger-Themen 4
X wie kann ich in bluej/java einene 2d array mit zahlen fuellen, so dass sich diese in der der zeilen Java Basics - Anfänger-Themen 2
L Array: Summe aller geraden und ungeraden Zahlen ermitteln Java Basics - Anfänger-Themen 9
H Gerade Zahlen aus Array entfernen Java Basics - Anfänger-Themen 8
B Fibonacci Zahlen rekursiv Array Java Basics - Anfänger-Themen 12
V Array zahlen eingeben und ausgeben Java Basics - Anfänger-Themen 5
S Zahlen Array durchsuchen Java Basics - Anfänger-Themen 6
J Array mit Zahlen füllen Java Basics - Anfänger-Themen 28
T Array mit String, Zahlen in If Saetze packen Java Basics - Anfänger-Themen 3
W 2dim - Array Ausgabe von Zahlen, teilbar durch 3. Java Basics - Anfänger-Themen 4
H n Zahlen aus einem Array addieren Java Basics - Anfänger-Themen 17
C OOP Array mit Zahlen zw. 0 und 9 befüllen Java Basics - Anfänger-Themen 3
A Double[] Array zahlen per Argument übergeben Java Basics - Anfänger-Themen 5
U JAVA - Ungerade Zahlen Array Java Basics - Anfänger-Themen 9
M Zahlen aus Array lesen Java Basics - Anfänger-Themen 19
N Unsortierter Array mit einmaligen Zahlen Java Basics - Anfänger-Themen 9
L Zahlen auf Diagonalen im Array Java Basics - Anfänger-Themen 15
T Erste Schritte Int Array zufällig mit Zahlen füllen Java Basics - Anfänger-Themen 7
J Erste Schritte Array: Häufigkeiten bzw. gerade/ungerade Zahlen Java Basics - Anfänger-Themen 5
T Mehrfach auftretende Zahlen in einem Array Java Basics - Anfänger-Themen 13
H Die Eingabe von beliebig vielen Zahlen in ein Array - ich kann es nicht Java Basics - Anfänger-Themen 6
A Zahlen im Array werden überschrieben Java Basics - Anfänger-Themen 6
T Zahlen in Array speichern und ausgeben Java Basics - Anfänger-Themen 14
M 3x3 - Array mit Zahlen von 0-8 zufällig belegen Java Basics - Anfänger-Themen 4
F.S.WhiTeY Mehrdimensionales array, größere zahlen von innen nach außen Java Basics - Anfänger-Themen 3
K Zahlen und buchstaben gemeinsam in ein array? Java Basics - Anfänger-Themen 17
S Zahlen in Array speichern und addieren Java Basics - Anfänger-Themen 4
M mehrfach auftretende zahlen in einem array Java Basics - Anfänger-Themen 6
M String mit mehreren Zahlen in Integer-Array Java Basics - Anfänger-Themen 2
X Array nur mit Zahlen (test) Java Basics - Anfänger-Themen 11
N Array mit negativen Zahlen Java Basics - Anfänger-Themen 4
E Array mit Zahlen von 1-(Zeilen*Spalten) befüllen Java Basics - Anfänger-Themen 8
O Zweidemensionales Array auf zwei gleiche Zahlen prüfen Java Basics - Anfänger-Themen 15
P Zahlen aus Datei in Array einlesen Java Basics - Anfänger-Themen 21
D 6 zahlen aus einem array rausziehen Java Basics - Anfänger-Themen 2
G Zahlen aus HashSet in ein int Array übergeben Java Basics - Anfänger-Themen 15
L zahlen in mehrdimensionales array einlesen Java Basics - Anfänger-Themen 3
G Mit Switch/Case Zahlen zu Array hinzufügen Java Basics - Anfänger-Themen 14
P String aus Zahlen auslesen und in einem Array speichern Java Basics - Anfänger-Themen 3
Q Zahlen sortiert in Array schreiben Java Basics - Anfänger-Themen 5
P Aus Text Datei nur Zahlen übernehmen Java Basics - Anfänger-Themen 13
K Warum werden immer noch doppelte Zahlen ausgegeben ? Java Basics - Anfänger-Themen 13
M negative Zahlen bei Intervallen Java Basics - Anfänger-Themen 10
M 3 Zahlen miteinander vergleichen Java Basics - Anfänger-Themen 18
J Taschenrechner mit mehr als 2 Zahlen. Java Basics - Anfänger-Themen 18
B Alle Zahlen finden, die 3 bestimmte Ziffern enthalten? Java Basics - Anfänger-Themen 9
K Java gleicher Wert von Zahlen? Java Basics - Anfänger-Themen 5
I aus 2 random zahlen soll nur die ungerade summe der beiden genommen werden. Java Basics - Anfänger-Themen 13
J Operatoren Zahlen addieren Java Basics - Anfänger-Themen 13
B Threads Counter mit ungeraden Zahlen Java Basics - Anfänger-Themen 32
JavaBeginner22 Java 2 Zufalls zahlen generieren. Java Basics - Anfänger-Themen 11
X Wie kann man ein Regex erstellen, die 8-Bit-Binär-Zahlen darstellen. Java Basics - Anfänger-Themen 1
M Stream mit den ersten n natürlichen Zahlen Java Basics - Anfänger-Themen 4
D Größtes Palindrom Produkt aus zwei dreistelligen Zahlen Java Basics - Anfänger-Themen 60
sserio Befreundete Zahlen Java Basics - Anfänger-Themen 7
AhmadSlack Verzweigungen zahlen multiplizieren Java Basics - Anfänger-Themen 4
U Lotto-Zahlen App Java Basics - Anfänger-Themen 34
berserkerdq2 Wie würde man einen regulären Ausdruck in Java schreiben, der prüft, dass zwei bestimtme Zahlen nicht nebeneinadner sind? Java Basics - Anfänger-Themen 3
H Arrays: Größten Zahlen Unterschied herausfinden Java Basics - Anfänger-Themen 20
bluetrix Programmieren eines Bots für Zahlen-Brettspiel Java Basics - Anfänger-Themen 9
J Zahlen bis zu einem bestimmten Grenzwert ausgeben Java Basics - Anfänger-Themen 11
W Wie ziehe ich von einer bestimmten Zahl, Zahlen ab, bis mein Ergebnis null beträgt? Java Basics - Anfänger-Themen 10
W Bestimmte Zahlen bei Math.random ausschließen? Java Basics - Anfänger-Themen 31
K Erste Schritte "Taschenrechner" zeigt keine Komma Zahlen an. Java Basics - Anfänger-Themen 8
P Drei Zahlen eines Würfelspiels auswerten Java Basics - Anfänger-Themen 7
H Häufigkeit von Zahlen ermitteln Java Basics - Anfänger-Themen 23
sashady Zahlen rekursiv zerlegen und Ziffern addieren Java Basics - Anfänger-Themen 38
H Zahlen kürzen Java Basics - Anfänger-Themen 2
ansystin Teilerfremde Zahlen ausgeben + Zahlenausgabe speichern Java Basics - Anfänger-Themen 3
nevel Programm für die Summer der Zahlen 1- 1ß Java Basics - Anfänger-Themen 12
jhCDtGVjcZGcfzug Fibonacci Zahlen rekursiv und iterativ Java Basics - Anfänger-Themen 21

Ähnliche Java Themen

Neue Themen


Oben