// This program rearranges an array into a zig-zag pattern, where the elements
// alternate between being smaller and larger than their neighbors
// a < b > c < d > e < f > g...
// 3 < 5 > 1 < 9 > 6 < 7 > 2 < 4
func rearrangeIntoZigZag(_ arr: inout [Int]) {
guard arr.count > 1 else { return }
for i in 0..<(arr.count - 1) {
if i.isMultiple(of: 2) {
// Expect arr[i] < arr[i + 1]
if arr[i] > arr[i + 1] {
arr.swapAt(i, i + 1)
}
} else {
// Expect arr[i] > arr[i + 1]
if arr[i] < arr[i + 1] {
arr.swapAt(i, i + 1)
}
}
}
}
var arr = [3, 5, 1, 7, 9, 6, 4, 2]
rearrangeIntoZigZag(&arr)
print(arr)
/*
run:
[3, 5, 1, 9, 6, 7, 2, 4]
*/