用c++实现合并排序算法
时间: 2024-04-07 17:24:07 浏览: 71
C++实现各种排序算法.zip
以下是用C++实现合并排序算法的代码:
```
void MergeSort(std::vector<int>& nums, const int start, const int part, const int end) {
std::vector<int> meArr;
int p1 = start;
int p2 = part;
while (p1 != part || p2 != end) {
if (p1 == part) {
while (p2 != end) {
meArr.push_back(nums[p2++]);
}
} else if (p2 == end) {
while (p1 != part) {
meArr.push_back(nums[p1++]);
}
} else {
meArr.push_back(nums[p1] < nums[p2] ? nums[p1++] : nums[p2++]);
}
}
//合并排序后反填充进入原数组
int pos = start;
for (auto it : meArr) {
nums[pos++] = it;
}
}
void Sort(std::vector<int>& nums) {
//步长
for (int i = 0; i < nums.size(); ++i) {
int pos = 0;
int len = 1 << i;
while (pos < nums.size()) {
int part = pos + len;
if (part >= nums.size()) {
part = nums.size() - 1;
}
int end = part + len;
if (end >= nums.size()) {
end = nums.size() - 1;
}
MergeSort(nums, pos, part, end);
pos += len*2;
}
}
}
```
该算法使用了迭代法实现,首先将数组分成若干个长度为1的子数组,然后将相邻的子数组进行合并排序,得到长度为2的有序子数组,再将相邻的有序子数组进行合并排序,得到长度为4的有序子数组,以此类推,直到整个数组有序。
阅读全文