Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

Wiggle Sort ใน C++


สมมติว่ามีอาร์เรย์ที่ไม่ได้เรียงลำดับชื่อ nums เราต้องเรียงใหม่แบบ in-place ให้ 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 ถึง n - 2 เพิ่ม i := i + 1 ทำ −

    • ถ้า i เป็นเลขคู่และ nums[i] > nums[i+1] เป็นจริง หรือ i เป็นเลขคี่และ nums[i] > nums[i+1] เป็นเท็จ แล้ว

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

ตัวอย่าง

ลองดูการติดตั้งต่อไปนี้เพื่อให้เข้าใจได้ดีขึ้น −

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