// 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
fn rearrange_into_zigzag(arr: &mut [i32]) {
for i in 0..arr.len().saturating_sub(1) {
if i % 2 == 0 {
// Expect arr[i] < arr[i + 1]
if arr[i] > arr[i + 1] {
arr.swap(i, i + 1);
}
} else {
// Expect arr[i] > arr[i + 1]
if arr[i] < arr[i + 1] {
arr.swap(i, i + 1);
}
}
}
}
fn main() {
let mut arr = [3, 5, 1, 7, 9, 6, 4, 2];
rearrange_into_zigzag(&mut arr);
println!("{arr:?}");
}
/*
run:
[3, 5, 1, 9, 6, 7, 2, 4]
*/