Verinin dizideki yerlerini değiştirmeye çalışmak biraz durumu karmaşıklaştırmış. Onun yerine geçici bir dizi oluşturup bu diziyi istediğin gibi doldurmak olayı daha basit tutacaktır.
Algoritmayı ve kodu açıklamaya çalıştım, senin hazırladığın kodu düzenleyerek ilerledim.

Algoritma:
Input'un ile aynı boyutta geçici, boş bir dizi oluştur.
İki tane index değeri tanımla, bir tanesi dizinin başından ilerleyecek, diğeri ise sonundan.
Input'unu baştan sona sırayla oku.
  • Gelen veri tek ise geçici oluşturduğun dizinin başını gösteren index'ine yaz ve bu indexi tutan değeri bir arttır.
  • Gelen veri çift ise geçici oluşturduğun dizinin sonunu gösteren index'ine yaz ve bu indexi tutan değeri bir azalt.
Geçici diziyi oluşturduktan sonra baştaki diziye ya da baştaki halini de tutman gerekiyorsa istediğin herhangi bir yere atayabilirsin.

Kod:
public static void main(String args[]) throws Exception {

  int a [] = {4,8,3,1,18,9,21,20,5,17};
  int i;
  int size = a.length;

  int out[] = new int[size];

  int leftIndex = 0; //Arrayin başını tutan index
  int rightIndex = size-1; //Arrayin sonunu tutan index

  for(i = 0; i<size; i = i+1)
  {
    if(a[i] % 2 != 0){ //Tek ise
      out[leftIndex] = a[i]; //Array'de başa yaz
      leftIndex++; //Array'in başını tutan indexi yükselt
    }
    else{ //Çift ise
      out[rightIndex] = a[i]; //Array'de sona yaz
      rightIndex--; //Array'in sonunu tutan indexi düşür
    }
  }

  a = out; //Sonucu ata.

  //Sonucu yazdır
  for(i = 0; i<size; i++)
    System.out.println("a["+i+"] = " + a[i]);
}
Umarım yardımcı olabilmişimdir.