acwing算法基础之基础算法--归并排序

目录

  • 1 知识点
  • 2 代码模板

1 知识点

归并排序算法步骤:
step1:确定分界点,比如mid = (left + right) / 2
step2:递归排序分界点左边部分、分界点右边部分。
step3:归并。将有序的左边序列和有序的右边序列,合并成一个有序序列。可以通过双指针算法实现。

2 代码模板

//输入向量类容器,对[l.r]进行排序
void merge_sort(vector<int>& nums, int l, int r) {
    if (l >= r) {
        return;
    }
    
    int mid = l + r >> 1;
    merge_sort(nums, l, mid);
    merge_sort(nums, mid+1, r);
    
    int i = l, j = mid+1;
    vector<int> t;
    while (i <= mid && j <= r) {
        if (nums[i] <= nums[j]) {
            t.emplace_back(nums[i++]);
        } else {
            t.emplace_back(nums[j++]);
        }
    }
    while (i <= mid) {
        t.emplace_back(nums[i++]);
    }
    while (j <= r) {
        t.emplace_back(nums[j++]);
    }
    
    for (int i = l, j = 0; i <= r; ++i, ++j) {
        nums[i] = t[j];
    }
    
    return;
}

你可能感兴趣的:(Acwing,算法)