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

C++의 대소 정렬

<시간/>

정수 목록이 있다고 가정하면 다음과 같이 목록을 정렬해야 합니다. -

  • 첫 번째 요소는 최대값입니다.

  • 두 번째 요소는 최소입니다.

  • 세 번째 요소는 두 번째 최대값입니다.

  • 네 번째 요소는 두 번째 최소값입니다.

등등.

따라서 입력이 [6,3,10,4]와 같으면 출력은 [10, 3, 6, 4]

가 됩니다.

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

  • ret 배열 정의

  • 배열 번호 정렬

  • j :=숫자 크기 - 1

  • 나는 :=0

  • 나는 <=j, 하는 동안 −

    • ret

      끝에 nums[j] 삽입
    • (j를 1만큼 감소)

    • i <=j이면 -

      • ret

        끝에 nums[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:
   vector<int> solve(vector<int> & nums) {
      vector<int> ret;
      sort(nums.begin(), nums.end());
      int j = nums.size() - 1;
      int i = 0;
      while (i <= j) {
         ret.push_back(nums[j]);
         j--;
         if (i <= j) {
            ret.push_back(nums[i]);
            i++;
         }
      }
      return ret;
   }
};
main() {
   Solution ob;
   vector<int> v = {6,3,10,4};
   print_vector(ob.solve(v));
}

입력

{6,3,10,4}

출력

10, 3, 6, 4