// 并归排序
class Solution {
public:
vector<int> sortArray(vector<int>& nums) {
vector<int> temp(nums.size()); // 开辟一个辅助数组
mergeSort(nums, temp, 0, nums.size()-1);
return nums;
}
// 并归排序核心代码!!!
void mergeSort(vector<int>& nums, vector<int>& temp, int left, int right)
{
if(left >= right) // 子数组只剩下一个元素的时候,是不需要在分解的
return;
else
{
// 分
int mid = left + (right-left)/2;
mergeSort(nums, temp, left, mid); // 对区间 [left,mid] 的元素进行排序
mergeSort(nums, temp, mid+1, right); // 对区间 [mid+1,right] 的元素进行排序
// 治
int ptr_1 = left; // 遍历区间 [left,mid] 的指针, 即子数组 1
int ptr_2 = mid+1; // 遍历区间 [mid+1,right] 的指针,即子数组 2
int ptr = left; // 遍历区间 [left,right] 的指针,即辅助数组
while(ptr_1<=mid && ptr_2<=right)
{
// 在两个子数组中找出较小的元素放到辅助数组中
if(nums[ptr_1] < nums[ptr_2])
temp[ptr++] = nums[ptr_1++];
else
temp[ptr++] = nums[ptr_2++];
}
// 将剩下的元素全部放到辅助数组中
while(ptr_1<=mid)
{
temp[ptr++] = nums[ptr_1++];
}
while(ptr_2<=right)
{
temp[ptr++] = nums[ptr_2++];
}
// 将辅助数组中的元素重新放到原数组中
for(int i=left; i<=right; i++)
nums[i] = temp[i];
}
}
};
并归排序C++代码
最新推荐文章于 2023-10-31 18:22:30 发布