归并排序--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;
}
相关推荐
zyl76511 小时前
FlashAttention 详解:从 GPU 硬件、普通 Attention 到分块计算与 Online Softmax
算法
爱读书的小胖15 小时前
LeetCode 122:买卖股票的最佳时机 II(C)解题分析
算法
结局无敌15 小时前
React Native for OpenHarmony 实战:三方库 react-native-modal-dialog 的鸿蒙化适配指南
深度学习·算法·react native·react.js·harmonyos
OPEN-F15 小时前
ROS2系列教程:上位机建图与导航(原理综合)
算法·机器人
weixin_3077791315 小时前
C++代码实现MATLAB中的fitrtree函数功能
开发语言·c++·算法·matlab
爱读书的小胖15 小时前
Codewars:Rot13(C)解题分析
c语言·开发语言
tomwang032215 小时前
路径优化建模、优化算法分类及工程化小结
算法·数学建模·分类
小羊没烦恼!15 小时前
Ajax与JSON的一些总结
android·java·前端·数据库·mysql·算法·okhttp
by2099916 小时前
哈希表——快速找到数据:冲突、删除与扩容的实现
数据结构·c++·哈希算法·散列表
2501_9269783316 小时前
人机通信协议--人和机器之间的交互想象
人工智能·经验分享·算法·ai写作