package main import ( "fmt" ) func main() { row := 0 for { n, _ := fmt.Scan(&row) if n == 0 { break } else { arr := make([]int, row) for i := 0; i < len(arr); i++ { fmt.Scan(&arr[i]) } process(arr) for i:=0; i<len(arr); i++ { fmt.Printf("%d ", arr[i]) } } } } func process(arr []int) { // 记录冲突位置所在 eve, odd := 0, 1 n := len(arr) // 每次交换最后一个位置,只看最后一个值,就可以避免交换的值影响查找范围 for odd < n && eve < n { if arr[n-1] % 2 == 1 { arr[n-1], arr[odd] = arr[odd], arr[n-1] odd+=2 } else { arr[n-1], arr[eve] = arr[eve], arr[n-1] eve+=2 } } } // 2个队列,接收奇数,偶数,依次放入 // func process(arr []int) { // odd := []int{} // eve := []int{} // for i := 0; i < len(arr); i++ { // if arr[i]%2 == 0 { // odd = append(odd, arr[i]) // } else { // eve = append(eve, arr[i]) // } // } // k := 0 // i, j := 0, 0 // for i < len(odd) && j < len(eve) { // arr[k], arr[k+1] = odd[i], eve[j] // k += 2 // i++ // j++ // } // for i < len(odd) { // arr[k] = odd[i] // i++ // k++ // } // for j < len(eve) { // arr[k] = eve[j] // j++ // k++ // } // }