c++:利用归并排序算法对以下数组进行排序。 (12,25,17,19,51,32,45,18,22,37,15)
时间: 2024-10-11 10:04:50 浏览: 27
在 C++ 中,我们可以使用归并排序(Merge Sort)算法对给定的整数数组进行排序。归并排序是一种分治策略的典型应用,它将大问题分解成小问题,然后递归地解决,并最终合并结果。
以下是步骤:
1. **分割**:首先,我们将数组分为两半,直到每个部分只有一个元素。在这个例子中,我们从中间开始划分数组。
2. **排序**:然后,对两个子数组分别递归地应用归并排序,直至达到基本情况。
3. **合并**:最后,我们将两个已排序的子数组合并回原来的顺序。这一步通过比较两个子数组的第一个元素,选择较小的一个放入结果数组,并继续此过程,直到全部元素都被添加到结果中。
以下是针对给定数组(12,25,17,19,51,32,45,18,22,37,15)的 C++ 代码示例:
```cpp
#include <iostream>
#include <vector>
void merge(std::vector<int>& arr, int left, int mid, int right) {
std::vector<int> temp(right - left + 1);
int i = left, j = mid + 1, k = 0;
while (i <= mid && j <= right) {
if (arr[i] <= arr[j])
temp[k++] = arr[i++];
else
temp[k++] = arr[j++];
}
// 将剩余未复制的部分加入到temp
while (i <= mid)
temp[k++] = arr[i++];
while (j <= right)
temp[k++] = arr[j++];
// 把临时数组的内容复制回原数组
for (int x = 0; x < temp.size(); x++)
arr[left + x] = temp[x];
}
void mergeSort(std::vector<int>& arr, int left, int right) {
if (left < right) {
int mid = left + (right - left) / 2;
mergeSort(arr, left, mid);
mergeSort(arr, mid + 1, right);
merge(arr, left, mid, right);
}
}
int main() {
std::vector<int> nums = {12, 25, 17, 19, 51, 32, 45, 18, 22, 37, 15};
int n = nums.size();
mergeSort(nums, 0, n - 1);
for (int num : nums)
std::cout << num << " ";
std::cout << "\n";
return 0;
}
```
运行这段代码后,你会得到一个按升序排列的新数组。
阅读全文