首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

合并排序工作但正在删除元素c++

合并排序是一种常见的排序算法,它将一个无序的数组分成两个子数组,然后分别对子数组进行排序,最后将两个有序的子数组合并成一个有序的数组。在C++中,可以使用递归或迭代的方式实现合并排序。

以下是一个使用递归实现合并排序的示例代码:

代码语言:txt
复制
#include <iostream>
#include <vector>

void merge(std::vector<int>& arr, int left, int mid, int right) {
    int n1 = mid - left + 1;
    int n2 = right - mid;

    std::vector<int> L(n1);
    std::vector<int> 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;
    int j = 0;
    int k = left;

    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(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> arr = {9, 5, 7, 1, 3, 8, 2, 6, 4};
    int n = arr.size();

    mergeSort(arr, 0, n - 1);

    std::cout << "Sorted array: ";
    for (int num : arr) {
        std::cout << num << " ";
    }
    std::cout << std::endl;

    return 0;
}

这段代码使用了递归的方式实现了合并排序。首先,定义了一个merge函数,用于合并两个有序的子数组。然后,定义了mergeSort函数,用于递归地将数组分成两半并进行排序。最后,在main函数中,创建一个待排序的数组,并调用mergeSort函数进行排序,最终输出排序后的结果。

合并排序的优势在于其稳定性和可扩展性。它可以处理大规模的数据集,并且在最坏情况下的时间复杂度为O(nlogn)。合并排序适用于各种排序场景,特别是对于需要稳定排序的情况。

腾讯云提供了多种云计算相关产品,其中包括云服务器、云数据库、云存储等。您可以访问腾讯云官方网站(https://cloud.tencent.com/)了解更多关于这些产品的详细信息。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券