ZigZag array implementation
Instead of that while-loop, I'd use a for-loop and use the common loop/index variable i.
Instead of a separate status variable, I'd simply use i % 2.
I'd deduplicate the two cases.
Putting the current two array elements into variables avoids duplicating the longer array[i] and array[i + 1] and simplifies the swap.
As Joop Eggen points out, it's probably better to not modify the array in-place and return it. (Unless you have a good reason to, which it seems you don't, as your own calling code ignores the returned value.)

Code:
    private static void zigZag(int[] array) {
        for (int i = 0; i &lt; array.length - 1; i++) {
            int a = array[i], b = array[i + 1];
            if (i % 2 == 0 ? a &gt; b : a &lt; b) {
                array[i] = b;
                array[i + 1] = a;
            }
        }
    }