`
Riddick
  • 浏览: 642048 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

常用排序算法实现之归并排序(Merge Sort)

阅读更多

归并排序的算法思想是分而治之(divide - conquer),每个递归过程分为三个步骤:

1) 分解:把待排序的n个元素的序列分解成两个子序列,每个子序列包括n/2个元素

2) 治理:对每个子序列分别调用归并排序(MergeSort),进行归并操作

3) 合并:合并两个排好序的子序列,生成排序结果

 

// 归并排序中的合并算法
void Merge(int array[], int start, int mid, int end)
{
    int temp1[10], temp2[10];
    int n1, n2;
    n1 = mid - start + 1;
    n2 = end - mid;

    // 拷贝前半部分数组
    for (int i = 0; i < n1; i++)
    {
        temp1[i] = array[start + i];
    }
    // 拷贝后半部分数组
    for (int i = 0; i < n2; i++)
    {
        temp2[i] = array[mid + i + 1];
    }
    // 把后面的元素设置的很大
    temp1[n1] = temp2[n2] = 1000;
    // 逐个扫描两部分数组然后放到相应的位置去
    for (int k = start, i = 0, j = 0; k <= end; k++)
    {
        if (temp1[i] <= temp2[j])
        {
            array[k] = temp1[i];
            i++;
        }
        else
        {
            array[k] = temp2[j];
            j++;
        }
    }
}

// 归并排序
void MergeSort(int array[], int start, int end)
{
    if (start < end)
    {
        int i;
        i = (end + start) / 2;
        // 对前半部分进行排序
        MergeSort(array, start, i);
        // 对后半部分进行排序
        MergeSort(array, i + 1, end);
        // 合并前后两部分
        Merge(array, start, i, end);
    }
}

 

 

分享到:
评论

相关推荐

    归并排序(Merge sort)(台灣譯作:合併排序)是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。

    归并排序(Merge Sort)是一种基于分治策略的高效排序算法,由计算机科学家John W. Backus于1945年提出。它的工作原理可以分为三个主要步骤:分解、解决和合并。 1. 分解:将原始数据序列分成两个相等(或接近相等...

    MATLAB实现插入排序、二分归并排序、归并排序.rar

    在本资源中,我们主要关注的是使用MATLAB编程语言实现三种经典的排序算法:插入排序、二分归并排序以及归并排序。这些算法是计算机科学基础中的重要组成部分,特别是在算法设计与分析领域。MATLAB是一种强大的数值...

    归并排序算法实现

    ### 归并排序算法实现详解 #### 一、引言 归并排序是一种经典的排序算法,采用分治法的思想,将待排序数组分为若干个子序列,这些子序列是已排序的,然后再按照一定的方式合并这些子序列得到最终排序后的数组。...

    排序-归并排序(Merge sort)

    归并排序(Merge Sort)是一种基于分治策略的高效排序算法,它的主要思想是将大问题分解成小问题,然后逐个解决小问题,最后再将解决好的小问题合并成解决大问题的答案。这种算法在计算机科学中有着广泛的应用,尤其...

    基于python的排序算法-归并排序Merge Sort

    归并排序(Merge Sort)是一种高效的、稳定的排序算法,它采用了分治法(Divide and Conquer)的设计理念。在Python中实现归并排序,我们可以将一个大问题分解为两个或多个相同或相似的小问题,然后分别解决这些小...

    常用排序算法java演示

    本文将深入探讨标题"常用排序算法java演示"中涉及的知识点,包括排序算法的原理、Java实现方式以及其在实际应用中的图形演示。 首先,让我们逐一了解几种常见的排序算法: 1. **冒泡排序(Bubble Sort)**:这是一...

    8大常用排序算法实现

    本文将详细解析八大常用排序算法的实现,帮助你更好地理解和测试这些算法。 1. 冒泡排序(Bubble Sort): 冒泡排序是一种简单的交换排序,通过不断比较相邻元素并交换,使得每次遍历都将最大(或最小)的元素“冒...

    各种常用排序算法的C语言实现

    本资源提供了各种常用排序算法的C语言实现,源自严蔚敏的经典教材《数据结构》。下面将详细介绍这些排序算法及其在C语言中的实现原理。 1. 冒泡排序(Bubble Sort) 冒泡排序是最基础的排序方法,通过不断交换相邻...

    常用排序算法实现(java)

    本资源提供了五种经典的排序算法的Java实现,包括选择排序(Selection Sort)、插入排序(Insertion Sort)、希尔排序(Shell Sort)、归并排序(Merge Sort)以及快速排序(Quick Sort)。 1. **选择排序**:选择排序是一种...

    快速排序与归并排序的算法比较实验报告

    **归并排序(Merge Sort)** 归并排序同样基于分治策略,但它的排序过程更加稳定。它将待排序的数组不断拆分成两个子数组,直到每个子数组只包含一个元素,然后逐步合并这些有序子数组,形成更大的有序数组。归并...

    用C实现快速排序、希尔排序、归并排序等排序算法

    最后,我们来研究归并排序(Merge Sort)。归并排序是由John von Neumann在1945年提出的,它是建立在归并操作上的一种有效的排序算法。该算法采用分治策略,将大问题分解为小问题来解决。首先,将数组分成两个子数组...

    python基本算法之实现归并排序(Merge sort)

    归并排序(Merge Sort)是一种基于分治策略的高效排序算法,由John von Neumann在1945年提出。它的主要思想是将大问题分解为小问题来解决,最终再将小问题的结果合并,从而得到整个问题的解。归并排序在处理大规模...

    数据结构 排序算法之归并排序

    归并排序(Merge Sort)是一种非常有效的排序算法,尤其在处理大量数据时表现出良好的稳定性和效率。 归并排序的基本思想源于分治法,即将大问题分解为小问题来解决。在归并排序中,我们首先将待排序的序列拆分为两...

    6种排序算法选择排序,冒泡排序,插入排序基数排序,快速排序,归并排序

    6. **归并排序(Merge Sort)** - 归并排序是建立在归并操作上的一种有效的排序算法,它采用了分治的策略,将大问题分解为小问题来解决。 - C++实现归并排序时,首先将数组分为两半,分别对左右两部分进行排序,然后...

    常用排序算法源程序

    这里我们主要探讨四个常见的排序算法:快速排序、堆排序、二路归并排序(包括递归和非递归实现)以及多路归并排序。这些算法在实际应用中具有广泛的重要性,尤其是在大数据处理和性能优化方面。 1. **快速排序...

    归并和快速排序c程序实现

    这里我们将深入探讨两种常见的排序算法:归并排序(Merge Sort)和快速排序(Quick Sort)。这两种都是基于分治策略的高效排序算法。 **归并排序**: 归并排序是一种稳定的排序算法,它通过将数据分成较小的部分,...

    经典算法的C#源码实现

    经典排序算法 - 归并排序Merge sort 经典排序算法 - 冒泡排序Bubble sort 经典排序算法 - 选择排序Selection sort 经典排序算法 - 鸡尾酒排序Cocktail sort 经典排序算法 - 希尔排序Shell sort 经典排序算法 - ...

Global site tag (gtag.js) - Google Analytics