# 4 Zahlen sortieren



## Jefferio (6. Jan 2013)

Wie einfach diese Aufgabe auch klingt, ich bin irgendwie am verzweifeln.
Die Aufgabe lautet ich soll 4 (beliebige) Zahlen aufsteigend sotieren. Habe mich ran gesetzt und habe herumprobiert.

Ich gehe zurzeit in eine Schule für Programmieren in die 1 Klasse, so verzeiht wenn ich mich ein wenig ungeschickt anstelle, bin halt noch ein Anfänger 

Ich arbeite mit keinen Klassen, go to, return ect.

Das habe ich bereits:

        int number1=1;
        int number2=2;
        int number3=3;
        int number4=4;

        if (number1<number2&&number1<number3&&number1<number4){

            if(number2<number3&&number2<number4){

                if (number3<number4){
                    System.out.println (number1+", "+number2+","+number3+", "+number4);
                }
                else{
                    System.out.println (number1+", "+number2+", "+number4+", "+number3);
                }


    }      
            else{
                if (number3<number2&&number3<number4){
                    if (number2<number4){
                    System.out.println (number1+", "+number3+", "+number2+", "+number4);                  
                }
                    else{
                        System.out.println (number1+", "+number3+", "+number4+", "+number2);
                    }

            }
  }
            if (number4<number2&&number4<number3){

                if (number2<number4){
                    System.out.println (number1+", "+number4+", "+number2+", "+number3);
                }
                else{
                    System.out.println (number1+", "+number3+", "+number4+", "+number2);
                }
            }
}
}
}


Doch wenn ich diese Zahlen eingebe:
int number1=1;
int number2=4;
int number3=3;
int number4=2;

kommt folgendes heraus:
1, 3, 2, 4


Das sotieren wenn number1 größer ist als eine der anderen Variablen ist doch ziemlich einfach das bekomme ich noch hin (muss man ja nur kopieren>einfügen>umbennen) aber es nützt mir nichts wenn "Part1" von den 4 nicht korrekt funktioniert.

Bitte helft mir!


----------



## Titanpharao (6. Jan 2013)

Also erstmal bitte im Forum für QUellcode Java-Code-Tags benutzen.
So in etwa:

```
List<Integer> numberList=new ArrayList<Integer>();
numberList.add(number1);
numberList.add(number2);
numberList.add(number3);
numberList.add(number4);
Collections.sort(numberList);
for(int i=0;i<numberList.size();++i)
System.out.println(numberList.get(i));
```
Nimm den Code und da haste es deinem Lehrer voll gezeigt


----------



## DrZoidberg (6. Jan 2013)

Du kannst das auch durch Tauschen von Variablen sortieren.


```
int number1=1;
int number2=4;
int number3=3;
int number4=2;
if(number1 > number2) {
    int temp = number1;
    number1 = number2;
    number2 = temp;
}
if(number2 > number3) {
    int temp = number2;
    number2 = number3;
    number3 = temp;
}
if(number3 > number4) {
    int temp = number3;
    number3 = number4;
    number4 = temp;
}
if(number1 > number2) {
    int temp = number1;
    number1 = number2;
    number2 = temp;
}
if(number2 > number3) {
    int temp = number2;
    number2 = number3;
    number3 = temp;
}
if(number1 > number2) {
    int temp = number1;
    number1 = number2;
    number2 = temp;
}
System.out.println("number1 = " + number1);
System.out.println("number2 = " + number2);
System.out.println("number3 = " + number3);
System.out.println("number4 = " + number4);
```


----------



## Jefferio (6. Jan 2013)

@Titanpharao
Tut mir leid  Leider darf ich solche codes nicht verwenden, ginge zwar schneller aber darf ich leider nicht :noe:

@DrZoidberg
Ist das das ganze programm? Was ist Temp? ???:L

Könnte mir jemand zeigen/sagen was an meinem Program falsch ist?


----------



## DrZoidberg (6. Jan 2013)

Da muss natürlich noch die Klassendefinition und die main Methode um den Code drum herum.
temp dient nur als temporäre Variable zum Tauschen der Werte.


```
public class Sortieren {
    public static void main(String[] args) {
        int number1=1;
        int number2=4;
        int number3=3;
        int number4=2;
        if(number1 > number2) {
            int temp = number1;
            number1 = number2;
            number2 = temp;
        }
        if(number2 > number3) {
            int temp = number2;
            number2 = number3;
            number3 = temp;
        }
        if(number3 > number4) {
            int temp = number3;
            number3 = number4;
            number4 = temp;
        }
        if(number1 > number2) {
            int temp = number1;
            number1 = number2;
            number2 = temp;
        }
        if(number2 > number3) {
            int temp = number2;
            number2 = number3;
            number3 = temp;
        }
        if(number1 > number2) {
            int temp = number1;
            number1 = number2;
            number2 = temp;
        }
        System.out.println("number1 = " + number1);
        System.out.println("number2 = " + number2);
        System.out.println("number3 = " + number3);
        System.out.println("number4 = " + number4);
    }
}
```


----------



## piu58 (6. Jan 2013)

Es gibt Bubble-Sort: Du gehst durch die Zahlenreihe durch und tauscht zwei benachbarte Elemente, wenn sie in der falschen Reihenfolge stehen. Die Zahlen in einen vektor zu speichern wäre dazu schon nützlich. Bei vier Elementen geht es aber auch anders: 
boolean getauscht=false;
if (number1>number2) { int h=number2;number2=number1;number1=h;getauscht=true;}
if (number2>number3) 
:

Das machst du so lange, bis nicht mehr getauscht wurde.


----------



## Jefferio (6. Jan 2013)

So, zuerst danke ich euch allen, das ihr mir so viel erklärt 

Habe mein Programm jetzt nochmal durchgeschaut und ich glaube es funktioniert ^^

Ist zwar etwas länger als eure Programme, jedoch verstehe ich meines auch 

Hoffe ich mach das jetzt richtig 


```
int number1=2;
        int number2=3;
        int number3=1;
        int number4=4;
        
        if (number1<number2&&number1<number3&&number1<number4){
            
            if(number2<number3&&number2<number4){
                
                if (number3<number4){
                    System.out.println (number1+", "+number2+","+number3+", "+number4);
                }
                else{
                    System.out.println (number1+", "+number2+", "+number4+", "+number3);
                }
                
               
    }      
            else{
                if (number3<number2&&number3<number4){
                    if (number2<number4){
                    System.out.println (number1+", "+number3+", "+number2+", "+number4);                  
                }
                    else{
                        System.out.println (number1+", "+number3+", "+number4+", "+number2);
                    }
                    
            }
  }
            if (number4<number2&&number4<number3){
                
                if (number2<number3){
                    System.out.println (number1+", "+number4+", "+number2+", "+number3);
                }
                else{
                    System.out.println (number1+", "+number4+", "+number3+", "+number2);
                }
            }
}
	else{
		if (number2<number1&&number1<number3&&number2<number4){
            
            if(number1<number3&&number1<number4){
                
                if (number3<number4){
                    System.out.println (number2+", "+number1+","+number3+", "+number4);
                }
                else{
                    System.out.println (number2+", "+number1+", "+number4+", "+number3);
                }
                
               
    }      
            else{
                if (number3<number1&&number3<number4){
                    if (number1<number4){
                    System.out.println (number2+", "+number3+", "+number1+", "+number4);                  
                }
                    else{
                        System.out.println (number2+", "+number3+", "+number4+", "+number1);
                    }
                    
            }
  }
            if (number4<number1&&number4<number3){
                
                if (number1<number3){
                    System.out.println (number2+", "+number4+", "+number1+", "+number3);
                }
                else{
                    System.out.println (number2+", "+number4+", "+number3+", "+number1);
                }
            }
}
}
	if (number3<number2&&number3<number1&&number3<number4){
            
            if(number2<number1&&number2<number4){
                
                if (number1<number4){
                    System.out.println (number3+", "+number2+","+number1+", "+number4);
                }
                else{
                    System.out.println (number3+", "+number2+", "+number4+", "+number1);
                }
                
               
    }      
            else{
                if (number1<number2&&number1<number4){
                    if (number2<number4){
                    System.out.println (number3+", "+number1+", "+number2+", "+number4);                  
                }
                    else{
                        System.out.println (number3+", "+number1+", "+number4+", "+number2);
                    }
                    
            }
  }
            if (number4<number2&&number4<number1){
                
                if (number2<number1){
                    System.out.println (number3+", "+number4+", "+number2+", "+number1);
                }
                else{
                    System.out.println (number3+", "+number4+", "+number1+", "+number2);
                }
            }
}
		else{
			if (number4<number2&&number4<number3&&number4<number1){
            
            if(number2<number3&&number2<number1){
                
                if (number3<number1){
                    System.out.println (number4+", "+number2+","+number3+", "+number1);
                }
                else{
                    System.out.println (number4+", "+number2+", "+number1+", "+number3);
                }
                
               
    }      
            else{
                if (number3<number2&&number3<number1){
                    if (number2<number1){
                    System.out.println (number4+", "+number3+", "+number2+", "+number1);                  
                }
                    else{
                        System.out.println (number4+", "+number3+", "+number1+", "+number2);
                    }
                    
            }
  }
            if (number1<number2&&number1<number3){
                
                if (number2<number3){
                    System.out.println (number4+", "+number1+", "+number2+", "+number3);
                }
                else{
                    System.out.println (number4+", "+number1+", "+number3+", "+number2);
                }
            }
}
		}
```


----------



## Spin (6. Jan 2013)

Moin,

ich hoffe es kommt keine neue Zahl dazu 

Schau mal hier: (psst ist Scala, kein Java  )

```
scala> val list = List(2,3,1,4)
list: List[Int] = List(2, 3, 1, 4)

scala> list.sortWith(_ < _)
res6: List[Int] = List(1, 2, 3, 4)
```

Das wars auch schon 

Deine Quellcode schaut ganz gut aus  Und die Anfänge sind doch auch schonmal prima. Aber wenn du lust hast weiter rumzuprobieren kannst du auch den schon genannten Bubblesort verwenden.

Das ist ein Ziemlich einfach algorithmus der sogar nicht schlecht läuft.

Probier einfach rum und wenn du fragen hast einfach stellen 


```
// Bubblesort

public void bubblesort() {

 int arr[] = {2,3,1,4};

// usw. siehe Bubblesort Wiki (der Anfang ist schwer, aber der Erfolg ist unbeschreiblch) :)

}
```

Zum luschern: Bubblesort in java


grüße spin


----------



## Landei (6. Jan 2013)

Inspiriert von Merge-Sort:


```
public static void main(String... args) {
        int a = 2;
        int b = 4;
        int c = 3;
        int d = 1;

        int e = a < b ? a : b;
        int f = a < b ? b : a;
        int g = c < d ? c : d;
        int h = c < d ? d : c;

        if (f < g) {
            System.out.printf("%d,%d,%d,%d%n", e,f,g,h);
        } else if (h < e) {
            System.out.printf("%d,%d,%d,%d%n", g,h,e,f);
        } else {
            int i = e < g ? e : g;
            int j = e < g ? g : e;
            int k = f < h ? f : h;
            int l = f < h ? h : f;
            System.out.printf("%d,%d,%d,%d%n", i,j,k,l);
        }
    }
```


----------



## Bleiglanz (7. Jan 2013)

Lass dich nicht von den vielen Brabble-Sorts verwirrden, dein Lehrer will vermutlich, dass du das mit if-Abfragen erledigst. Das ist natürlich nur eine ÜBUNG, aber eine sehr sinnvolle. Du sollst wahrscheinlich auch keine Variablen vertauschen und ähnliches, sondern die Zahlen nur in der richtigen Reihenfolge ausgeben?

Da es 24 Möglichkeiten gibt, sollte die erste Idee aus 24 if's bestehen

```
if(a<=b && b<=c && c<= d) {...}
if(a<=b && b<=c && d<=c) {...}
```
Das ist natürlich nicht besonders aufregend, so dass Teilaufgabe 2 lautet: kann man das mit weniger if-Abfragen erreichen? Wie viele braucht man mindestens?


----------



## Landei (7. Jan 2013)

Klein-Gauß hat auch nicht brav 1+2+3...+99+100 gerechnet, sondern 50*101=5050, und hatte eine Stunde frei...


----------

