Write a function to convert the array into alternate increasing decreasing numbers:
a[0] <= a[1] >= a[2] <= a[3] >=...
Note: You should solve it in place and one pass.
Solution 1:
public void wiggle_sort(int[] arr) {
int n = arr.length;
if(n <= 1) return;
boolean inc = true;
int prev = arr[0];
for(int i=1; i<n; i++) {
if((inc && prev <= arr[i]) || (!inc && prev >= arr[i])) {
arr[i-1] = prev;
prev = arr[i];
} else {
arr[i-1] = arr[i];
}
inc = !inc;
}
}
Solution 2:
void wiggle_sort(vector<int>& arr) {
if(arr.size() < 2) return;
int flag = 1;
int prev = arr[0];
for(int i=1; i<arr.size(); i++) {
if(prev*flag <= arr[i]*flag) {
arr[i-1] = prev;
prev = arr[i];
} else {
// arr[i-1] = arr[i];
swap(arr[i-1], arr[i]);
}
flag = -flag;
}
}
Reference:
http://www.mitbbs.com/article_t1/JobHunting/32575573_0_1.html