用c++语言实现由用户输入数组的归并排列
时间: 2024-10-18 18:07:45 浏览: 25
C++实现两个有序数组的合并
5星 · 资源好评率100%
在C++中,你可以使用归并排序算法来对用户输入的数组进行排序。以下是简单的步骤和代码实现:
**步骤1**: 定义一个函数用于归并两个已排序的子数组。
```cpp
void merge(int arr[], int left, int mid, int right) {
int n1 = mid - left + 1;
int n2 = right - mid;
// 创建临时数组存放合并结果
int L[n1], R[n2];
// 分别复制左边和右边的元素到临时数组
for (int i = 0; i < n1; ++i)
L[i] = arr[left + i];
for (int j = 0; j < n2; ++j)
R[j] = arr[mid + 1+ j];
// 将两个已排序的数组合并
int i = 0, j = 0, k = left;
while (i < n1 && j < n2) {
if (L[i] <= R[j]) {
arr[k++] = L[i++];
} else {
arr[k++] = R[j++];
}
}
// 处理剩余部分,如果左侧有剩余
while (i < n1) {
arr[k++] = L[i++];
}
// 如果右侧有剩余
while (j < n2) {
arr[k++] = R[j++];
}
}
```
**步骤2**: 主函数中接收用户输入的数组,然后递归地分割数组并调用merge函数进行排序。
```cpp
#include <iostream>
using namespace std;
// 归并排序函数
void mergeSort(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() {
int size;
cout << "Enter the array size: ";
cin >> size;
// 用户输入数组
int arr[size];
cout << "Enter elements of the array: ";
for (int i = 0; i < size; ++i)
cin >> arr[i];
// 调用归并排序
mergeSort(arr, 0, size - 1);
cout << "Sorted array is: ";
for (int i = 0; i < size; ++i)
cout << arr[i] << " ";
return 0;
}
```
当你运行这个程序,它会提示用户输入数组的大小和元素,然后显示排序后的数组。
阅读全文