# Array nach ungerade zahlen sortieren



## DrippleTripple (20. Mrz 2009)

Hi,

komme mal wieder nicht drauf... das ist ja normaler algorithmus zum sortieren



```
for (int i=0; i < n-1; i=i+1)  {        
      for (int j=n-1; j > i; j=j-1) {       
        if (a[j-1] > a[j])                 
         {
            temp = a[j-1];                
            a[j-1] = a[j];                
            a[j] = temp;                   
         }
  } 

}
```

wo baue ich denn die bedingung dass die ungerade zuerst rein sollen und dann die gerade zahlen...


----------



## Lexi (20. Mrz 2009)

```
if(zahl%2 == 0)
    //dann ist sie gerade
```

Mit dem Modulo Operator wird der Rest ausgegeben, der übrig bleibt wen du zwei Zahlen teilst.
z.B:  19:5 = 3 Rest 4 | 7:2 = 3 Rest 2


----------



## DrippleTripple (20. Mrz 2009)

na wie die zahl zu ermitteln ist ob die gerade ist oder nicht weiß ich.

mache ich einfach zweimal diese schleife for sowohl im if als auch im else und lasse dann einfach die zählen bis zum welchen platz im array ich bei den gerade gekommen und dann ab da weiter?


----------



## Lexi (20. Mrz 2009)

Abgesehen davon, dass ich nicht so ganz verstanden habe, was du uns mit deinem letzten Post versucht hast zu ermitteln, klang das was ich verstanden habe ein wenig komisch.

Du könntes dein zu sortierendes Array einmal durchlaufen und immer wenn du eine gerade Zahl findest diese in ein anderes Array schreiben. Das machst du solange bis in dem neuen Array alle geraden Zahlen liegen. Jetzt kannst du das gleiche mit den ungeraden machen. Ist natürlich ziemlich unperformant.


----------



## max40 (20. Mrz 2009)

[HIGHLIGHT="Java"]int[] a = new int[] { 1, 5, 4, 12, 9, 13,  3, 8, 11, 6, 2, 7, 10  };

int n = a.length;


for (int i = 0; i < n - 1; i = i + 1) {
	for (int j = n - 1; j > i; j = j - 1) {

		int iA = a[j - 1];
		int iB = a[j];

		// true = ungerade
		boolean bA = iA % 2 == 1; 
		boolean bB = a[j] % 2 == 1; 

		if ((bA == bB && iA > iB) || (!bA && bB) ){

			a[j - 1] = iB;
			a[j] = iA;
		}
	}

}[/HIGHLIGHT]


----------



## SchonWiederFred (21. Mrz 2009)

DrippleTripple hat gesagt.:


> wo baue ich denn die bedingung dass die ungerade zuerst rein sollen und dann die gerade zahlen...


Vorausgesetzt, dass das Array keine negativen Zahlen beinhaltet, kannst Du in drei Schritten vorgehen:
1. Ungerade Zahlen negativ machen
2. Array ganz normal sortieren
3. Alle Zahlen wieder positiv machen

```
public static void sortEvenOdd(int[] a)
{
	for (int i = 0; i < a.length; ++i)
		a[i] |= (a[i] & 1) << (Integer.SIZE - 1);
	Arrays.sort(a);
	for (int i = 0; i < a.length; ++i)
		a[i] &= Integer.MAX_VALUE;
}
```


----------



## 0x7F800000 (21. Mrz 2009)

anderen eigenen Comparator verwenden...
*ach hoppla, das sind ja keine normale collections*
ne, manche Leute machen sich das Leben echt schwerer als es sein sollte ;(


----------

