归并排序--C语言实现

1. 简述

归并排序的原理是将,两个较大的数组分为大小几乎一致的两个数组。

再将两个数组进行合并成新的有序数组。

合并两个数组的时候需要额外的一个数组的空间。

2. 实现

上图说明过程

  • 代码
c 复制代码
#include <stdio.h>

void Merge(int *arr, int *tmp, int l, int center, int r) {

    int lp = l;
    int rp = center + 1;
    int ptr = l;

    while ( lp < center + 1 || rp < r + 1) {
        if ( lp > center || (rp < r + 1 && arr[lp] > arr[rp]) )
            tmp[ptr++] = arr[rp++];
        else
            tmp[ptr++] = arr[lp++];
    }


    for ( int i = l; i < r + 1; ++i)
        arr[i] = tmp[i];
}



void mergeSort(int *arr,int *tmp, int l,int r) {

    if ( l >= r)
        return ;
    int center = l + (r - l >> 1);
    mergeSort(arr, tmp, l, center);
    mergeSort(arr, tmp, center + 1, r);


    Merge(arr, tmp, l, center, r);

}

int main() {
	int arr[] = {5,1,3,7,8,4,2,6};
    int tmp[] = {0,0,0,0,0,0,0,0};

    int sz = sizeof(arr)/sizeof(arr[0]);

    mergeSort(arr, tmp, 0, sz - 1);


    for ( int i = 0; i < sz; ++i)
        printf("%d ", arr[i]);
    
	return 0;
}
相关推荐
加什么瓦17 分钟前
Redis——底层数据结构
数据结构
小狗祈祷诗29 分钟前
day22-数据结构之 栈&&队列
c语言·数据结构
AI+程序员在路上1 小时前
XML介绍及常用c及c++库
xml·c语言·c++
好吃的肘子1 小时前
Elasticsearch架构原理
开发语言·算法·elasticsearch·架构·jenkins
胡耀超1 小时前
霍夫圆变换全面解析(OpenCV)
人工智能·python·opencv·算法·计算机视觉·数据挖掘·数据安全
软行1 小时前
LeetCode 每日一题 3341. 到达最后一个房间的最少时间 I + II
数据结构·c++·算法·leetcode·职场和发展
nlog3n2 小时前
Go语言交替打印问题及多种实现方法
开发语言·算法·golang
How_doyou_do2 小时前
备战菊厂笔试4
python·算法·leetcode
朱剑君2 小时前
第九天——贪心算法——非递减数组
算法·贪心算法
Wnq100722 小时前
工业场景轮式巡检机器人纯视觉识别导航的优势剖析与前景展望
人工智能·算法·计算机视觉·激光雷达·视觉导航·人形机器人·巡检机器人