sortieralgorithmus

Status
Nicht offen für weitere Antworten.

nebben

Mitglied
Hallo

Das Programm sollte Zahlen-Arrays sortieren.

Code:
public class SortList {
public static void main(String args[]) {	

ArrayList sortList = new ArrayList();

list.add("13 12 11 ...");
list.add("21 10 19 ...");
list.add("10 1 20 ...");
.
.
.
??sortieren und ausgeben???

Die Programm sollte einfach die sortierten Zahlenreihen ausgeben.

11 12 13 ...
10 19 21 ...
1 10 20 ...
.
.
.

Hoffentlich kannst du mir helfen.

mfg
nebben
 

Wildcard

Top Contributor
Welches Verfahren willst du verwenden?
Quicksort, Mergesort, Bubblesort...
Wo genau hast du Probleme?
Am besten du gehst einfach mal zu Wikipedia, da solltest du entsprechende Algorithmen finden...
 

nebben

Mitglied
Es ist geht mir nicht um den algorithmus. Es soll nur egal wie sortieren können.

Also soweit bin ich nun:

Code:
import java.util.Collections;
import java.util.ArrayList;
import java.util.Iterator;

public class SortList {
 
public static void main(String args[]) {	

ArrayList sortList = new ArrayList();

sortList.add("1,23,435,345,12");
sortList.add("23,56,523,234,2,43");
Collections.sort(sortList);
Code:
Iterator it = sortList.iterator();
while(it.hasNext() == true) {
            System.out.println(it.next());

}}}


aber die Programmausgabe ist nur:

1,23,435,345,12
23,56,523,234,2,43

Also das Sortieren fehlt. Wie baue ich das noch ein?
 
B

bygones

Gast
achherrje - du fügst 2 Strings hinzu und die werden sotiert... wenn du Zahlen hinzufügen willst musst du die einzeln als Objekte hinzufügen !!!
 

Scotty

Aktives Mitglied
Code:
import java.util.*;

class SortListDemo extends ArrayList
{
	void sort()
	{
		for(int i=0;i<this.size();i++) //gesamte Liste
		{
			int zeiger=i;	//Zeiger bei i
			Integer zeigerinhalt=(Integer)this.get(i); //Vergleichselement bei i
			for(int j=i+1;j<this.size();j++) //unsortierter Listenbereich
			{
				Integer inhalt=(Integer)this.get(j); //Element entnehmen
				if(inhalt<zeigerinhalt) //wenn kleiner
				{
					zeiger=j; //setze Zeiger neu (auf Kleinstes)
					zeigerinhalt=inhalt; //neues Vergleichselement
				}
			}
			//Kleinstes gefunden -> Tausch
			this.set(zeiger,this.get(i)); //Vorderstes an Zeigerposition
			this.set(i,zeigerinhalt); //Kleinstes an vorderste Position
		}
	}
	
	void print()
	{
		for(int i=0;i<this.size();i++)
		{
			System.out.println(((Integer)this.get(i)).intValue());
		}
	}
}

class SortMain
{
	public static void main(String args[])
	{
		SortListDemo l=new SortListDemo();
		l.add(new Integer(23));
		l.add(new Integer(2));
		l.add(new Integer(6));
		l.add(new Integer(7));
		l.add(new Integer(0));
		l.sort();
		l.print();
	}
}
Liefert zwar noch nen kleinen Error wegen unchecked Operations beim compilieren, funzt aber trotzdem. Is glaube Selectsort, aber weiß nich genau. Konnte mich nur noch daran erinnern. Zu beachten ist noch, dass in Listen nur Objecte eingefügt werden können, also keine primitiven Datentypen.
 

Sky

Top Contributor
Vielleicht hilft Dir ja dies weiter:
Code:
    String s = "1,23,435,345,12";
    
    // <String in int-Array überführen>
    StringTokenizer tok = new StringTokenizer(s, ",");
    int[] array = new int[tok.countTokens()];
    int lauf = 0;
    while ( tok.hasMoreTokens() ) {
      array[lauf++] = Integer.parseInt(tok.nextToken());
    }
    // </String in int-Array überführen>

    // Sortieren
    Arrays.sort(array);

    // <int-Array ausgeben>
    for ( int i = 0; i < array.length; i++ ) {
      System.out.println(array[i]);
    }
    // </int-Array ausgeben>
 

Jockel

Top Contributor
nebben hat gesagt.:
Es ist geht mir nicht um den algorithmus. Es soll nur egal wie sortieren können.
Dann bist du doch fertig... deine Strings werden doch wunderbar sortiert. Du hast ja gesagt, dass es dir egal ist, wie sortiert wird... Und hättest du dir mal die Mühe gemacht, zwei Minuten auf der von mir benannten Seite zu lesen, hättest du genügend Java-Quellcode gefunden... :bahnhof:
 

nebben

Mitglied
Dann muss ich aber viele

sortList.add("1,23,435,345,12"); in

sortList.add(new Integer(1));
sortList.add(new Integer(23));
.
.
.

und

sortList.add("23,56,523,234,2,43"); in

sortList.add(new Integer(23));
sortList.add(new Integer(56));
.
.


umwandeln.


Kann man es auch so oder so ähnlich schreiben?

sortList.add(new Integer(53),new Integer(73), ....);
 

nebben

Mitglied
Gibt es eine oder so eine fertige Methode?

StringtoArray.("234,243,345,45,456,2,23")

und auch wieder zurück

ArraytoSring .(234,243,345,45,456,2,23)
 

mic_checker

Top Contributor
Du beziehst dich auf Scottys Quellcode oder was? Wenn du es so hinschreibst wie unten funktioniert es nicht.

edit:
meine antwort war noch auf das vorherige post bezogen.
 

mic_checker

Top Contributor
Wie soll dein String denn aussehen?

So oder was:
"234,243,345,45,456,2,23"

Und du willst das Array:
[0] = 234;
[1] = 243;
....

?

Also wenn du es als String hast, dann sollte das nicht gehen. Wenn du aber ne ArrayList hast, dann kannst du in ein Array umwandeln. Guckst du.
 

nebben

Mitglied
Um es übersichtlich zu gestalten:

Das ist der Code:


Code:
import java.util.Collections;
import java.util.ArrayList;
import java.util.Iterator;

public class SortList                               {

public static void main(String args[])      {   

ArrayList sortList = new ArrayList();

sortList.add("1,23,435,345,12");
sortList.add("23,56,523,234,2,43");

while(it.hasNext() == true) 			{

            Collections.sort(sortList);
            System.out.print(it.next());
	                                                    }

                                                           }}


Wie schreibe ich eine irgendeine Zahlenreihe als ArrayList?

? sortList.add(1,23,435,345,12); ?
 

nebben

Mitglied
Wenn ich den anderen Weg gehe:
Code:
import java.util.*;

public class SortList {
 
public static void main(String args[]) {	

ArrayList sortList = new ArrayList();

sortList.add(new Integer(4));
sortList.add(new Integer(3)); 
sortList.add(new Integer(2));
sortList.add(new Integer(1)); 
sortList.add(new Integer(4));
sortList.add(new Integer(3)); 
sortList.add(new Integer(2));
sortList.add(new Integer(1)); 


Iterator it = sortList.iterator();

while(it.hasNext() == true) 			{
            	
		Collections.sort(sortList);
		System.out.print(it.next());
	        System.out.print(" ");	                                 		
}}}


Wie schafft man es, folgende Programmausgabe zu bekommen:

1 2 3 4
1 2 3 4


Bisherige Ausgabe:

1 1 2 2 3 3 4 4
 

Bert Brenner

Bekanntes Mitglied
Naja, indem du nicht eine Liste mit den Werten {4,3,2,1,4,3,2,1} füllst sondern unterschiedliche Listen verwendest.
 

nebben

Mitglied
Bei 1000 Listen hätte ich auch 1000 Zeilen.

Collections.sort(sortList1);
Collections.sort(sortList2);
Collections.sort(sortList3);
...
Collections.sort(sortList1000);

Kann man das auch noch anders?
 

Bert Brenner

Bekanntes Mitglied
Wenn der Inhalt von meinString zb. "3,2,67" ist dann gibts nachher ein String[] s mit dem Inhalt {"3","2","67"}. Steht aber auch in der API

Und zu deinen 1000 Listen, die kannst du doch auch in eine Liste verpacken und diese dann durchgehen.
 

nebben

Mitglied
String[] s = meinString.split(",");

Wandelt das mir einfach einen String in ein Array das ich mit .sort sortieren kann?
Wie und kann ich das leicht mit dem SortList code integrieren?
 

nebben

Mitglied
den 1000 listenansatz will ich nicht weiterverfolgen.

mein Problem:

ich habe sowas:
78 56 87 34

und möchte:
34 56 78 87


Der Code ist auf ArrayList ausgerichtet.

Code:
import java.util.*

public class SortList {
public static void main(String args[]) {   
ArrayList sortList = new ArrayList();

Code:
z1="78 56 87 34";
z2="28 65 56 23";

String[] s = z1.split(","); 
String[] s = z2.split(","); 

sortList.add("78", "56", "87", "34");
sortList.add("28", "65", "56", "23");

Code:
Collections.sort(sortList);

iIterator it = sortList.iterator();
while(it.hasNext() == true) {
            System.out.println(it.next());}}}



Wie muss ich den mittleren programmteil ändern das die Zahlenreihen sortiert ausgegeben werden können?

Ausgabe:

34 56 78 87
23 28 56 65
 

mic_checker

Top Contributor
Code:
      String str = "78,56,87,34";
      String[] s = str.split(",");
      
      Arrays.sort(s);

Btw. hab split ja ganz vergessen ;) Man möge mir verzeihen, aber BWL Vorlesungen morgens können schon mal den ganzen Tag versauen ;)
 

Scotty

Aktives Mitglied
so ein quatsch, mit den strings zu arbeiten. woher beziehst du denn dein werte? werden die zufällig generiert, oder gibts da irgendeine messquelle? bei zahlen würde ich nie strings nehmen. das ist viel zu umständlich. versuch die strings zu umgehen, wenns geht.
 

nebben

Mitglied
mein problem ist:

ich habe viele Zahlenreihen und möchte eine reihe jeweils in eine arraylist schreiben, sodass man einzeln auf die werte zugreifen kann, weiss aber nicht wie das geht.

wie geht das?
 

Scotty

Aktives Mitglied
Code:
int zz=*Zufallszahl* //neue Zufallszahl
Integer zI=new Integer(zz); //in Object umformen
ArrayList a=new ArrayList(); //neue ArrayList
a.add(zI); //Zufallszahl hinzufügen
zI=(Integer)a.get(x); //Element entnehmen, muss gecasted werden
zz=zI.intValue(); //und wieder zurück in primitiven Datentyp

is doch ganz einfach. was du nur immer mit den strings wolltest, die sind nämlich gar nicht so "geil".
 

nebben

Mitglied
nun:

Code:
int i;
ArrayList sortList = new ArrayList();
for(int i=0; i < sortList.length;  i++)
{
     sortList.add(new Object());
}
Wie schreibe ich 34 23 12 34 45 in das Array?
 

molotov

Mitglied
nebben hat gesagt.:
Code:
int i;
ArrayList sortList = new ArrayList();
for(int i=0; i < sortList.length;  i++)
{
     sortList.add(new Object());
}

Das hast Du doch im anderen Thread schon gepostet - richtiger wirds hier auch nicht.
Aus folgenden Gründen ist das ziemlicher Quatsch:
1. afaik hat ArrayList keine öffentliche Variable length, von daher dürfte das nicht mal compilieren.
2. selbst wenn sie hätte, wäre es direkt nach dem Anlegen sicher 0, die schleife würde damit nie durchlaufen
3. es ist ziemlich sinnlos, irgendwelche Objects da rein zu schreiben - was willst Du mit denen denn anfangen?!? (aber so weit kommt wegen 2. ja eh nie)

nebben hat gesagt.:
Wie schreibe ich 34 23 12 34 45 in das Array?

Ich sehe da kein Array. Wie Du was in die ArrayList schreibst, wurde Dir hier schon oft genug erklärt.
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben