สมมติว่ามีอาร์เรย์ที่ไม่ได้เรียงลำดับชื่อ 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, ]