📌  相关文章
📜  用于计算数组中的倒数的 C++ 程序 - 集 1(使用合并排序)(1)

📅  最后修改于: 2023-12-03 14:56:22.448000             🧑  作者: Mango

用于计算数组中的倒数的 C++ 程序 - 集 1(使用合并排序)

程序说明

本程序实现了计算一个整数数组中每个元素的倒数的功能,使用的方法是合并排序。输入数组的元素数量和值,输出每个元素的倒数。如果某个元素为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)$,与其他排序算法相比,在数据的规模较大时表现良好。