Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++의 흔들기 정렬

<시간/>

nums라는 정렬되지 않은 배열이 있다고 가정하고 nums[0] <=nums[1]>=nums[2] <=nums[3].... 등이 되도록 제자리에서 재정렬해야 합니다.

따라서 입력이 nums =[3,5,2,1,6,4]와 같으면 출력은 [3,5,1,6,2,4]가 되며 다른 답변이 있을 수 있습니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • n :=숫자 크기

  • i :=0 초기화의 경우, i 를 수행합니다.

    • i가 짝수이고 nums[i]> nums[i+1]이 참이거나 i가 홀수이고 nums[i]> nums[i+1]이 거짓이면

      • 스왑(숫자[i], 숫자[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, ]