在C ++中摆动排序

假设我们有一个名为nums的未排序数组,我们必须就地重新排序,以使nums [0] <= nums [1]> = nums [2] <= nums [3] ....等。

因此,如果输入像nums = [3,5,2,1,6,4],那么输出将是[3,5,1,6,2,4],可能还有其他答案。

为了解决这个问题,我们将遵循以下步骤-

  • n:= nums的大小

  • 对于初始化i:= 0,当i <n-1时,更新i:= i + 1,请执行-

    • swap(nums [i],nums [i + 1])

    • 如果i为偶数且nums [i]> nums [i + 1]为true或i为奇数且nums [i]> nums [i + 1]为false,则

    例 

    让我们看下面的实现以更好地理解-

    #include <bits/stdc++.h>
    using namespace std;
    void print_vector(vector<auto< v){
       cout << "[";
       for(int i = 0; i<v.size(); i++){
          cout << v[i] << ", ";
       }
       cout << "]"<<endl;
    }
    class Solution {
    public:
       void wiggleSort(vector<int<& nums) {
          int n = nums.size();
          for(int i = 0; i < n - 1; i+=1){
             if((i % 2 == 0) == ( nums[i] > nums[i + 1])){
                swap(nums[i], nums[i + 1]);
             }
          }
       }
    };
    main(){
       vector<int< v = {3,5,2,1,6,4};
       Solution ob;
       ob.wiggleSort(v);
       print_vector(v);
    }

    输入值

    {3,5,2,1,6,4}

    输出结果

    [3, 5, 1, 6, 2, 4, ]