归并排序的思想

简介: 归并排序的思想

归并排序(Mergesort)是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(DivideandConquer)的一个非常典型的应用。

代码实现:

#include <iostream>
#include <vector>
using namespace std;
void mergeSort(vector<int>& nums, int l, int r) {
    if (l >= r) {
        return;
    }
    int mid = (l + r) / 2;
    mergeSort(nums, l, mid);
    mergeSort(nums, mid + 1, r);
    vector<int> temp(r - l + 1);
    int i = l, j = mid + 1, k = 0;
    while (i <= mid && j <= r) {
        if (nums[i] < nums[j]) {
            temp[k++] = nums[i++];
        } else {
            temp[k++] = nums[j++];
        }
    }
    while (i <= mid) {
        temp[k++] = nums[i++];
    }
    while (j <= r) {
        temp[k++] = nums[j++];
    }
    for (int i = l; i <= r; ++i) {
        nums[i] = temp[i - l];
    }
}
int main() {
    vector<int> nums {5, 1, 9, 3, 7, 4, 8, 6, 2};
    mergeSort(nums, 0, nums.size() - 1);
    for (auto num : nums) {
        cout << num << " ";
    }
    return 0;
}
相关文章
|
4月前
|
搜索推荐 算法
12.分而治之归并排序
12.分而治之归并排序
27 0
|
3月前
|
搜索推荐
排序算法之七:归并排序(非递归)
排序算法之七:归并排序(非递归)
排序算法之七:归并排序(非递归)
|
4月前
|
搜索推荐 算法
分而治之归并排序
分而治之归并排序
18 0
|
4月前
|
算法 搜索推荐 Java
【算法系列篇】分治-快排
【算法系列篇】分治-快排
|
算法 搜索推荐
分治法实现合并排序(归并排序),理解分治算法思想,实现分治算法的完美例子合并排序(含码源与解析)
分治法实现合并排序(归并排序),理解分治算法思想,实现分治算法的完美例子合并排序(含码源与解析)
106 0
|
8月前
快速排序思想
快速排序思想
|
11月前
|
人工智能 算法
|
算法 安全
数据结构与算法之二分查找&&分而治之思想
数据结构与算法之二分查找&&分而治之思想
91 0
数据结构与算法之二分查找&&分而治之思想
|
搜索推荐
【排序算法】简单选择排序思想分析及代码实现详解
【排序算法】简单选择排序思想分析及代码实现详解
128 0
【排序算法】简单选择排序思想分析及代码实现详解
|
机器学习/深度学习 搜索推荐 算法
【排序算法】冒泡排序(改进版)的思想分析与代码实现详解
【排序算法】冒泡排序(改进版)的思想分析与代码实现详解
213 0
【排序算法】冒泡排序(改进版)的思想分析与代码实现详解