美文网首页
数据结构-归并排序

数据结构-归并排序

作者: 羽裳有涯 | 来源:发表于2020-03-25 09:38 被阅读0次

原理

归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。归并排序是一种稳定的排序方法。

图示过程

一分解

image.png

二合并

image.png

代码实现

// 交换 或者赋值排序
//中间数组排序
/**
* 合并两个有序数列
* array[left]~array[mid]为第一组
* array[mid+1]~array[right]为第二组
* temp[]为存放两组比较结果的临时数组
*/
void merge(int arr[], int left, int mid, int right) {
    int temp[right - left + 1];
    int i = left;
    int j = mid + 1;
    int t = 0;
    // 比较左右两部分的元素,哪个小,把那个元素填入temp中
    while (i <= mid && j <= right) {
        if (arr[i] <= arr[j]) {
            temp[t++] = arr[i++];
        }else {
            temp[t++] = arr[j++];
        }
    }
    
    // 上面的循环退出后,把剩余的元素依次填入到temp中
    // 以下两个while只有一个会执行
    while (i <= mid) {
        temp[t++] = arr[i++];
    }
    
    while (j <= right) {
        temp[t++] = arr[j++];
    }
    
    t = 0;
    
    while (left <= right) {
        arr[left++] = temp[t++];
    }
}

void merge_sort_gui(int arr[], int left, int right) {
    if (left == right) {
        return;
    }
    int mid = left + (right - left)/2;
    merge_sort_gui(arr, left, mid); // 递归归并左边元素
    merge_sort_gui(arr, mid + 1, right); // 递归归并右边元素
    merge(arr, left, mid, right);  //再将两个有序数列合并
}

void merge_sort(int arr[], int length) {
    
    merge_sort_gui(arr, 0, length -1);    
}

相关文章

  • 数据结构与算法--归并排序

    数据结构与算法--归并排序 归并排序 归并排序基于一种称为“归并”的简单操作。比如考试可能会分年级排名和班级排名,...

  • 排序算法-堆排序

    参考: Java排序算法(五):堆排序 【算法与数据结构】图说堆排序 【数据结构】排序算法:希尔、归并、快速、堆排...

  • 2019-02-23 普林斯顿大学 数据结构课程笔记

    一、 数据结构:基本数据结构:栈、队列、背包、优先队列 排序:排序、归并排序、堆排序、基数排序 查找:二叉查找树、...

  • 排序算法

    常考排序 快速排序 归并排序 归并排序求逆序数对 堆排序 堆排序是指利用堆这种数据结构所设计的一种排序算法。 堆积...

  • 算法与数据结构路线图

    学习算法与数据结构,深刻理解计算机科学 排序算法:插入、冒泡、选择、希尔、快速、归并、堆排序、计数排序、桶排序、基...

  • 玩转算法面试:(三)LeetCode数组类问题

    数组中的问题其实最常见。 排序:选择排序;插入排序;归并排序;快速排序查找:二分查找法数据结构:栈;队列;堆…… ...

  • 算法(3)- 数组

    数组中的问题其实最常见如:排序(选择排序、插入排序、归并排序、快速排序)、查找(二分查找法)、数据结构(栈、队列、...

  • 排序算法

    约定 选择排序 冒泡排序 插入排序 希尔排序 归并排序1. 归并方法2. 自顶向下归并排序3. 自底向上归并排序 ...

  • 排序二:归并、快排

    文章结构 归并排序 快速排序 源码 1. 归并排序 1.1 什么是归并排序 归并排序的思想是:将待排序的区间平分成...

  • java归并排序

    归并排序什么是归并排序:图解归并排序归并排序有两种实现方式,一是基于递归,而是基于迭代1)基于递归的归并排序: 基...

网友评论

      本文标题:数据结构-归并排序

      本文链接:https://www.haomeiwen.com/subject/zaiwyhtx.html