📅  最后修改于: 2023-12-03 14:56:22.448000             🧑  作者: Mango
本程序实现了计算一个整数数组中每个元素的倒数的功能,使用的方法是合并排序。输入数组的元素数量和值,输出每个元素的倒数。如果某个元素为0,则返回0。
#include <iostream>
using namespace std;
void merge(int arr[], int l, int m, int r)
{
int n1 = m - l + 1;
int n2 = r - m;
int L[n1], R[n2];
for (int i = 0; i < n1; i++)
L[i] = arr[l + i];
for (int j = 0; j < n2; j++)
R[j] = arr[m + 1 + j];
int i = 0;
int j = 0;
int k = l;
while (i < n1 && j < n2) {
if (L[i] <= R[j]) {
arr[k] = L[i];
i++;
}
else {
arr[k] = R[j];
j++;
}
k++;
}
while (i < n1) {
arr[k] = L[i];
i++;
k++;
}
while (j < n2) {
arr[k] = R[j];
j++;
k++;
}
}
void mergeSort(int arr[], int l, int r)
{
if (l >= r)
return;
int m = l + (r - l) / 2;
mergeSort(arr, l, m);
mergeSort(arr, m + 1, r);
merge(arr, l, m, r);
}
int main()
{
int n;
cout << "Enter the number of elements in the array: ";
cin >> n;
int arr[n];
for(int i = 0; i < n; i++){
cout << "Enter element " << i+1 << ": ";
cin >> arr[i];
}
mergeSort(arr, 0, n-1);
cout << "The reciprocals of the given array:" << endl;
for(int i = 0; i < n; i++){
if(arr[i] == 0){
cout << 0 << " ";
}
else{
cout << 1.0/arr[i] << " ";
}
}
return 0;
}
注释:上述程序由两个函数组成,mergeSort()
和 merge()
。mergeSort()
函数使用递归的方法进行合并排序。merge()
函数将两个排序的子数组合并成一个完整的排序数组。
程序运行如下:
Enter the number of elements in the array: 5
Enter element 1: 4
Enter element 2: 7
Enter element 3: 0
Enter element 4: 2
Enter element 5: 0
The reciprocals of the given array:
0.25 0.142857 0 0.5 0
程序首先要求用户输入集合中的元素数量和值,并将其存储在数组中。然后,它使用合并排序函数对数组进行排序。最后,程序迭代整个数组,并将每个元素的倒数打印到控制台。如果元素为0,则打印0并继续到下一个元素。
使用合并排序算法计算集合中每个元素的倒数是一种有效的方法。该算法具有时间复杂度 $O(n\log n)$,与其他排序算法相比,在数据的规模较大时表现良好。