在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, ]