package main import ( "fmt" ) func main() { num := 0 for { n, _ := fmt.Scan(&num) if n == 0 { break } else { arr := make([]int, num) for i:=0; i<num; i++ { fmt.Scan(&arr[i]) } // 参考快排做法 less := -1 // 代表<1 区域到最右边界 more := num // 代表>1 区域到最左边界 i := 0 for i<more { if arr[i] < 1 { // 小于1,交换less,i位置,保证less区域内均小于1 less++ arr[less], arr[i] = arr[i], arr[less] i++ } else if arr[i] > 1 { // 大于1,交换more,i位置,保证more区域内大于1 more-- arr[i], arr[more] = arr[more], arr[i] } else { // 等于1,不做任何操作。小于1,大于1都调整好了,等于1也就调整好了 i++ } } for i:=0; i<len(arr); i++ { if i== len(arr)-1 { fmt.Println(arr[i]) } else { fmt.Printf("%d ", arr[i]) } } } } }