`
hellojyj
  • 浏览: 62108 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

二路归并排序

 
阅读更多
/**
    二路归并排序

*/

#include<cstdio>

//待排序测试的数组
int arry[] = {7,11,9,15,18,22,0,1,102,18,19};

void mergeSort(int arr[],int s,int t);
void myMerge(int arr[],int s,int m,int t);
void printArr(int arr[],int s, int t);

int main()
{
    printf("Before merge-sorting the array is :\n");
    printArr(arry,0,10);

    mergeSort(arry,0,10);

    printf("After merge-sorting the array is :\n");
    printArr(arry,0,10);

    return 0;
}

//归并排序
void mergeSort(int arr[],int s,int t)
{
    if(s<t)
    {
        int m = (s+t)/2;
        mergeSort(arr,s,m);
        mergeSort(arr,m+1,t);
        myMerge(arr,s,m,t);
    }
    else
    {
        return ;
    }
}

//合并两个排好序的数组
void myMerge(int arr[],int s,int m,int t)
{
    int i = s;
    int j = m+1;
    int p = 0;
    //这里借用了一个中间数组来合并
    int newArr[t-s+1];

    while(i<=m&&j<=t){
        if(arr[i]<arr[j]){
            newArr[p++] = arr[i++];
        }else{
            newArr[p++] = arr[j++];
        }
    }

    while(i<=m)
        newArr[p++] = arr[i++];
    while(j<=t)
        newArr[p++] = arr[j++];

    p = 0;
    for(int k=s;k<=t;k++)
        arr[k] = newArr[p++];
}
//打印数组
void printArr(int arr[],int s, int t)
{
    for(int i=s;i<=t;i++)
        printf("%d ",arr[i]);
    printf("\n");
}

 

分享到:
评论

相关推荐

    C语言二路归并排序算法

    ### C语言二路归并排序算法 #### 概述 归并排序是一种高效的排序算法,其基本思想是采用分治法(Divide and Conquer),将一个数组分成两个子数组,然后递归地对这两个子数组进行排序,最后将两个有序的子数组合并...

    直接插入排序 冒泡排序 快速排序 直接选择排序 堆排序 二路归并排序 C#源代码

    直接插入排序、冒泡排序、快速排序、直接选择排序、堆排序和二路归并排序是计算机科学中经典的排序算法,它们在数据处理和算法学习中占有重要地位。这些排序算法各有特点,适用场景不同,下面将逐一详细介绍,并结合...

    单链表为存储结构, 实现二路归并排序的算法

    二路归并排序是一种高效的排序算法,尤其适用于大型数据集,其主要思想是将大问题分解为小问题,再通过合并解决。在这个场景中,我们使用单链表作为存储结构来实现二路归并排序,这与传统的数组或动态数组有所不同,...

    二路归并排序算法(递归实现)

    递归实现的二路归并排序算法,其中对结构体按其内部一个关键字(本例是对一个任务结构体,按其收益排序)进行排序

    归并类\二路归并排序

    二路归并排序是一种高效的、基于分治策略的排序算法,它将大问题分解为小问题,然后将小问题的结果合并成最终的解决方案。在这个过程中,我们不使用递归,而是采用迭代的方式来实现。下面是对二路归并排序的详细解释...

    二路归并算法排序

    二路归并算法排序是归并排序的一种实现方式,通过将两个有序表合并成为一个更大的有序表来实现排序。该算法的基本思想是将原始数组分成两个小数组,分别对这两个小数组进行排序,然后将两个有序表合并成为一个更大的...

    /*.编写完整的二路归并排序程序。*/

    /*.编写完整的二路归并排序程序。*/ /*.编写完整的二路归并排序程序。*/

    二路归并和多路归并排序PPT数据结构课件

    ### 二路归并排序与多路归并排序 #### 二路归并排序 **基本概念** 二路归并排序是一种高效的排序算法,属于比较排序的一种,它通过递归地将数组分为越来越小的部分,直到每个部分只有一个元素,然后通过合并这些...

    java二路归并排序示例分享

    "java二路归并排序示例分享" java二路归并排序是一种高效的排序算法,通过分治法将数组分成小的数组分别排序,然后将排序好的数组合并。下面是java二路归并排序示例的详细解释: 什么是二路归并排序 二路归并排序...

    C语言二路归并排序算法.rtf

    C语言二路归并排序算法.rtf

    直接插入排序、希尔排序、起泡排序、快速排序、简单选择排序、堆排序、二路归并排序

    二路归并排序是分治策略的一个经典应用。它首先将数组分成两半,然后递归地排序每一半,最后将两个有序的数组合并成一个有序数组。 #### 代码实现 二路归并排序的伪代码实现如下: ```cpp void Merge(int arr[], ...

    MATLAB二分归并排序算法实验.rar

    二分归并排序是一种高效的排序算法,它结合了分治策略和归并操作。在MATLAB环境中实现二分归并排序,可以让我们更好地理解和运用这种算法。以下将详细阐述二分归并排序的工作原理、MATLAB实现过程以及相关知识点。 ...

    插入排序、冒泡排序、归并排序、快速排序的C++实现

    插入排序、冒泡排序、归并排序、快速排序四种排序方式的C++实现,各写成了一个函数,主函数中可以选择调用那一个。初始化数组时用的是随机种子srand((int)time(0))。在宏中定义数组大小。

    C语言算法之归并排序C语言算法之归并排序

    #### 二、归并排序的基本步骤 归并排序主要由两个关键步骤组成: 1. **分解**: 将原始数组分成尽可能相等的两个子数组。 2. **合并**: 对每一个子数组递归地执行归并排序,然后再将排序好的子数组合并为一个有序...

    c++实现二路归并排序的示例代码

    特别是二路归并排序,作为归并排序的一种特殊情况,它在实际应用中经常被用来处理大量数据的排序问题。在本文中,我们将深入探讨C++实现二路归并排序的示例代码,包括其基本思想、算法分析以及具体的代码实现。 ...

    3种排序算法(快速、二路归并、插入)java

    这里我们讨论的是三种经典的排序算法:快速排序、二路归并排序和插入排序,它们都是用Java语言实现的。以下是对这三种排序算法的详细介绍: 1. **插入排序(Insertion Sort)**: 插入排序是一种简单直观的排序...

    java算法-二路归并

    本篇将详细探讨"二路归并排序"这一经典算法,并结合Java环境(如NetBeans)进行讲解。 二路归并排序(Two-Way Merge Sort)是基于分治策略的一种排序算法。它将一个大问题分解为小问题,然后逐步解决,最终合并成...

    排序-6-二路归并.cpp

    排序-6-二路归并.cpp

Global site tag (gtag.js) - Google Analytics