当前位置: 首页 > news >正文

排序算法【归并排序】

一、归并排序算法的原理

        如下面数组所示进行归并排序。

        对左半部分进行排序操作。

        对左半部分进行归并操作。

二、归并排序

#include <stdio.h>
#include "test.h"/* 归并排序法* @arr:数组的首地址指针* @begin:需要排序数组的起始序号* @len:数组的长度*/
void merge_sort(int* arr, int begin, int len)
{int* buff = (int*)malloc(sizeof(int)*len);   //定义数组空间,用于存放排放好的数据if (len - begin <= 1)          //递归的退出条件return;int mid = (len + begin) / 2;   //去中间值merge_sort(arr, begin, mid);   //数组中间值左半部分递归排序merge_sort(arr, mid, len);     //数组中间值右半部分递归排序int x1 = begin, x2 = mid, k=0;while (x1 < mid || x2 < len){//(x2 == len)是判断右半部分越界,加上 (x1 < mid) 可以判断左半部分越界//(arr[x1] <= arr[x2])左右两边数组的比较,比较之后放在buff中if ((x2 == len) || ((x1 < mid) && (arr[x1] <= arr[x2])))    {buff[k++] = arr[x1++];}else{buff[k++] = arr[x2++];}}//将排序号的buff拷贝到原来的数组中for (int i = begin; i < len; i++){arr[i] = buff[i];}free(buff);return;
}void main()
{int* arr = CreateArray(10000);//TEST_MY(selection_sort, arr, 10000);TEST_MY(merge_sort, arr, 10000);/*unguarded_insert_sort(arr, 0, 10000, 1);*///printf("data:%d, %d, %d, %d\r\n", arr[0], arr[1], arr[2], arr[3]);free(arr);return;
}

运行的结果如下所示:

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • XSS小游戏(题目+解析)DOM破坏!!!
  • Lambda表达式与流式编程
  • 开发笔记:uniapp+vue+微信小程序 picker +后端 省市区三级联动
  • 超精细CG杰作:8K壁纸级官方艺术插画,展现极致美丽与细节的汉服女孩
  • nginx实战演练
  • Vue3核心探索:深入解析组合式API中的mount方法
  • 保研考研机试攻略:第三章——数学(1)
  • 代码随想录算法训练营 | 动态规划 part05
  • 设计模式解析:组合模式与装饰模式
  • php7.4二进制安装-contos7
  • HoloLens 和 Unity 空间坐标系统 Coordinate systems
  • 信号signal与信号量semaphore的区别
  • 基于STM32开发的智能植物浇水系统
  • 音视频相关知识
  • 算法的学习笔记—链表中倒数第 K 个结点(牛客JZ22)
  • Hexo+码云+git快速搭建免费的静态Blog
  • jQuery(一)
  • MYSQL 的 IF 函数
  • Python爬虫--- 1.3 BS4库的解析器
  • Spring核心 Bean的高级装配
  • 猫头鹰的深夜翻译:JDK9 NotNullOrElse方法
  • 数据可视化之 Sankey 桑基图的实现
  • 跳前端坑前,先看看这个!!
  • 原生JS动态加载JS、CSS文件及代码脚本
  • AI又要和人类“对打”,Deepmind宣布《星战Ⅱ》即将开始 ...
  • JavaScript 新语法详解:Class 的私有属性与私有方法 ...
  • 分布式关系型数据库服务 DRDS 支持显示的 Prepare 及逻辑库锁功能等多项能力 ...
  • 进程与线程(三)——进程/线程间通信
  • ​【已解决】npm install​卡主不动的情况
  • ​DB-Engines 11月数据库排名:PostgreSQL坐稳同期涨幅榜冠军宝座
  • ​LeetCode解法汇总1410. HTML 实体解析器
  • (android 地图实战开发)3 在地图上显示当前位置和自定义银行位置
  • (leetcode学习)236. 二叉树的最近公共祖先
  • (pt可视化)利用torch的make_grid进行张量可视化
  • (PWM呼吸灯)合泰开发板HT66F2390-----点灯大师
  • (入门自用)--C++--抽象类--多态原理--虚表--1020
  • (源码分析)springsecurity认证授权
  • (终章)[图像识别]13.OpenCV案例 自定义训练集分类器物体检测
  • (转) ns2/nam与nam实现相关的文件
  • (转)MVC3 类型“System.Web.Mvc.ModelClientValidationRule”同时存在
  • (转)winform之ListView
  • (转载)虚幻引擎3--【UnrealScript教程】章节一:20.location和rotation
  • ***原理与防范
  • .gitignore文件_Git:.gitignore
  • .NET 4 并行(多核)“.NET研究”编程系列之二 从Task开始
  • .net 获取某一天 在当月是 第几周 函数
  • .Net(C#)自定义WinForm控件之小结篇
  • .NET/C# 检测电脑上安装的 .NET Framework 的版本
  • .net最好用的JSON类Newtonsoft.Json获取多级数据SelectToken
  • @staticmethod和@classmethod的作用与区别
  • @Tag和@Operation标签失效问题。SpringDoc 2.2.0(OpenApi 3)和Spring Boot 3.1.1集成
  • [ Linux ] Linux信号概述 信号的产生
  • [023-2].第2节:SpringBoot中接收参数相关注解
  • [AI]文心一言出圈的同时,NLP处理下的ChatGPT-4.5最新资讯
  • [AIGC codze] Kafka 的 rebalance 机制