Sort an Array

ㅋㅋ·2023년 3월 1일
0

알고리즘-leetcode

목록 보기
121/135

정수형 벡터 nums를 받고 해당 벡터를 빌트인 함수를 사용하지 않고 정렬하는 문제

class Solution {
public:
    vector<int> sortArray(vector<int>& nums) {
        return DivideAndConquer(0, nums.size(), nums);
    }
private:
    vector<int> DivideAndConquer(int index, int length, vector<int>& nums)
    {
        vector<int> result(length);
        if (length == 1)
        {
            result[0] = nums[index];
            return result;
        }

        int halfLength{length >> 1};
        vector<int> front = std::move(DivideAndConquer(index, halfLength, nums));

        vector<int> rear;
        if (length % 2 == 0)
        {
            rear = std::move(DivideAndConquer(index + halfLength, halfLength, nums));
        }
        else
        {
            rear = std::move(DivideAndConquer(index + halfLength, halfLength + 1, nums));
        }

        auto it = result.rbegin();
        for (; it != result.rend() && front.empty() == false && rear.empty() == false; ++it)
        {
            if (rear.back() < front.back())
            {
                *it = front.back();
                front.pop_back();
            }
            else
            {
                *it = rear.back();
                rear.pop_back();
            }
        }

        while (front.empty() == false)
        {
            *it = front.back();
            front.pop_back();
            ++it;
        }

        while (rear.empty() == false)
        {
            *it = rear.back();
            rear.pop_back();
            ++it;
        }

        return result;
    }
};

0개의 댓글