归并排序C++完整代码 可放心食用

#include <iostream>

#include <vector>

using namespace std;

// 合并两个有序数组

vector <int> arr;

void merge(int left, int mid, int right) {

    // 创建两个临时数组用于存储分割后的数组

    int n1 = mid - left + 1; // 左边数组的大小

    int n2 = right - mid; // 右边数组的大小

    vector<int> temp1(n1);

    vector<int> temp2(n2);

    // 分别将原数组中的元素拷贝到临时数组中

    for (int i = 0; i < n1; i++) temp1[i] = arr[left + i];

    for (int j = 0; j < n2; j++) temp2[j] = arr[mid + 1 + j];

    // 合并两个临时数组到原数组中

    int i = 0; // 左边数组的起始索引

    int j = 0; // 右边数组的起始索引

    int k = left; // 合并后数组的起始索引

    while (i < n1 && j < n2)

    {

        if (temp1[i] <= temp2[j]) arr[k] = temp1[i++];

        else arr[k] = temp2[j];

    }

    // 将剩余的元素拷贝到原数组中

    while (i < n1) arr[k] = temp1[i];

    while (j < n2) arr[k] = temp2[j];

// 归并排序

void mergeSort(int left, int right)

{

    if (left < right)

    {

        int mid = left + (right - left) / 2;

        // 分割数组并递归调用归并排序

        mergeSort(left, mid);

        mergeSort(mid + 1, right);

        // 合并两个有序数组

        merge(left, mid, right);

    }

}

 

int main()

{

    int n;

    cin >> n;

    for (int i = 0; i < n; i++) cin >> arr[i];

    // 调用归并排序算法

    mergeSort(0, n - 1);

    cout << "排序后的数组: ";

    for (int i = 0; i < n; i++) cout << arr[i] << " ";

    return 0;

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值