# Prüfen, ob Array aufsteigend sortiert ist



## Gast (26. Okt 2006)

Guten Abend!

Könnte mir bitte jemand helfen; ich will prüfen, ob ein beliebiges Array aufsteigend sortiert ist, doch irgendwie klappt es nicht so ganz mit u. a. Code.... 
Vielen, vielen Dank für eure Hilfe!!  
LG




```
static boolean isSortedAscending(int[] a) {
		for (int i = 0; i < a.length; i++) {
			int min = a[i];
			while (min <= a[i+1]) {	
				min = a[i+1];
			}
		}
		return true;
	}
```
[/code]


----------



## SlaterB (26. Okt 2006)

das liegt vielleicht daran, dass dieser Code nichst mit den Anforderungen 'aufsteigend sortiert' zu tun hat,

schon gar nicht mit 'beliebiges Array' denn das Array ist ja fest vorgegeben 
bei deinen Fragen würde ich auf jeden Fall auf einen ganz allgemeinen Ansatz verzichten, 
und eine Operation für Comparable-Arrays, eine für int-Arrays, boolean-Array usw. definieren, 
falls wirklich alle Arrays abgedeckt werden sollen,

--------

wie funktioniert nun eine solche Operation?
Array durchlaufen und jeweils benachbarte Felder vergleichen,
wenn <= dann gut, ansonsten schlecht,

gar nicht schwer oder?
mit 'min' hat das nix zu tun


----------



## LoN_Nemesis (26. Okt 2006)

Zudem wird immer true zurückgegeben und nie false.


----------



## Micha_S (26. Okt 2006)

So könnte man das auch machen:


```
public boolean istAufsteigendSortiert(int[] a)
  { for (int i=0; i<a.length;i++)
     { for (int j=i;j<a.length;j++)
        {  if (a[i]>a[j])
            {return false;}
         }
     }
     return true;
  }
```

Das müsste so eigentlich gehen, du guckst einfach, ob die erste Zahl die kleinste ist, wenn ja dann gehste ne Zahl weiter und lässt die erste weg...


----------



## Illuvatar (26. Okt 2006)

Was ist das denn für ein augenkrebsverursachendes code formatting? :roll:

Ich finde das so besser lesbar (bzw. ist das folgende eher nach den Konventionen):

```
public boolean istAufsteigendSortiert(int[] a) 
  { 
     for (int i = 0; i < a.length; i++) { 
        for (int j = i; j < a.length; j++) {
           if (a[i] > a[j]) {
              return false;
           } 
        } 
     } 
     return true; 
  }
```


----------



## Guest (26. Okt 2006)

Vielen Dank!!
Also schreib' ich jetzt wie gehabt meine (Zähl-)for-Schleife, dann setz ich ein 

```
while (a [i] <= a[i+1]) {
     i++;
}
```
Würde das so stimmen?


----------



## Guest (26. Okt 2006)

Illuvatar hat gesagt.:
			
		

> Was ist das denn für ein augenkrebsverursachendes code formatting? :roll:
> 
> Ich finde das so besser lesbar (bzw. ist das folgende eher nach den Konventionen):
> 
> ...




Vielen, vielen Dank!!!! Das macht natürlich viel mehr Sinn;ist (auch für mich als totalen Neueinsteiger) sehr leicht nachzuvollziehen!!! Danke nochmal!!!


----------



## SlaterB (26. Okt 2006)

wenn man nun schon Code vollständig verrät,
sollte man unbedingt von dieser unheimlich ineffizienten Variante zur besseren und kürzeren wechseln:


```
public boolean istAufsteigendSortiert(int[] a) 
  { 
     for (int i = 0; i < a.length-1; i++) { 
           if (a[i] > a[i+1]) { 
              return false; 
           } 
     } 
     return true; 
  }
```

bei 1000 Elementen verursacht die eine rund 1000*1000/2 Vergleiche (quadratisch)
die andere nur 1000 (linear)


----------

