Te propongo que cambies el planteamiento.
1º Genera el array de nº aleatorios:
2º Derivar los impares abajo en el array, los pares arriba en el array
Es un código sencillo, escueto... y resuelve bien el problema en pocas líneas de código.
1º Genera el array de nº aleatorios:
Código [Seleccionar]
Entero: k, Array(de 100 elementos)
Bucle K de 0 a 99
Array(k) = Random(1-1000)
Fin bucle
2º Derivar los impares abajo en el array, los pares arriba en el array
Código [Seleccionar]
Entero: Impares, pares, tmp
Impares=0
Pares=99
Mientras Pares sea mayor que Impares
Mientras ((Array(Impares) and 1) = 1) //recorriendo desde abajo, si es impar saltamos al siguiente
Impares += 1
Repetir
Mientras ((Array(Pares) and 1) = 0) // desde arriba hacia abajo, si es par saltamos al anterior
Pares -= 1
Repetir
// Tenemos un par abajo y un impar arriba, intercambiarlos.
tmp = Array(impares)
Array(impares) = Array(Pares)
Array(Pares) = Tmp
Repetir
// La condición del bucle principal, hace que el punto de encuentro se hayan intercambiado, luego los corregimos (tratar de añadir condicionales para evitarlo, supone código más ineficiente que estas tres líneas para arreglarlo):
tmp = Array(impares)
Array(impares) = Array(Pares)
Array(Pares) = Tmp
Es un código sencillo, escueto... y resuelve bien el problema en pocas líneas de código.