정수형 벡터 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;
}
};