Wiggle Sort

medium array greedy sorting

Problem

Reorder the array so a[0] <= a[1] >= a[2] <= a[3] >= … in-place.

Inputnums = [3,5,2,1,6,4]
Output[3,5,1,6,2,4]
Alternates: 3≤5≥1≤6≥2≤4.

def wiggle_sort(nums):
    for i in range(1, len(nums)):
        if (i % 2 == 1 and nums[i] < nums[i-1]) or            (i % 2 == 0 and nums[i] > nums[i-1]):
            nums[i], nums[i-1] = nums[i-1], nums[i]
    return nums
function wiggleSort(nums) {
  for (let i = 1; i < nums.length; i++) {
    if ((i % 2 === 1 && nums[i] < nums[i-1]) ||
        (i % 2 === 0 && nums[i] > nums[i-1])) {
      [nums[i], nums[i-1]] = [nums[i-1], nums[i]];
    }
  }
  return nums;
}
class Solution {
    public void wiggleSort(int[] nums) {
        for (int i = 1; i < nums.length; i++) {
            if ((i % 2 == 1 && nums[i] < nums[i-1]) ||
                (i % 2 == 0 && nums[i] > nums[i-1])) {
                int t = nums[i]; nums[i] = nums[i-1]; nums[i-1] = t;
            }
        }
    }
}
void wiggleSort(vector& nums) {
    for (int i = 1; i < (int)nums.size(); i++) {
        if ((i % 2 == 1 && nums[i] < nums[i-1]) ||
            (i % 2 == 0 && nums[i] > nums[i-1])) {
            swap(nums[i], nums[i-1]);
        }
    }
}
Time: O(n) Space: O(1)