C++归并排序(注释超详细)

C++归并排序的实现

1、MergeSort.h

/* 初始版本,升序排序 */
/* 时间复杂度:O(nlbn) 将n个待排序记录归并次数为lbn,一趟归并O(n)
   空间复杂度:O(n) 递归栈最大深度为[lbn] + 1 ,而辅助数组大小为n
   稳定:无论最好还是最坏情况时间复杂度都是O(nlbn)
*/
#ifndef MERGESORT_H
#define MERGESORT_H

void Merge(int *arr, int n)
{
    int temp[n];    // 辅助数组
    int b = 0;  // 辅助数组的起始位置
    int mid = n / 2;    // mid将数组从中间划分,前一半有序,后一半有序
    int first = 0, second = mid;    // 两个有序序列的起始位置

    while (first < mid && second < n)
    {
        if (arr[first] <= arr[second])   // 比较两个序列
            temp[b++] = arr[first++];
        else
            temp[b++] = arr[second++];
    }

    while(first < mid)              // 将剩余子序列复制到辅助序列中
            temp[b++] = arr[first++];
    while(second < n)
            temp[b++] = arr[second++];
    for (int i = 0; i < n; ++i)    // 辅助序列复制到原序列
        arr[i] = temp[i];
}

void MergeSort(int *arr, int n)
{
    if (n &
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值