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

归并排序算法

      归并排序采用分治的思想,现将数组分裂成更小的单元,将小单元的先进性排序,然后逐次合并,启时间复杂度nlogn,由于需要另加一个辅助数组空间复杂度为O(n)

 1、分裂

/*** 分裂操作*/
void  merge_sort(int* arr,int left, int right){if (left >= right)return;int mid = (left + right) / 2;// 分裂操作merge_sort(arr, left, mid);merge_sort(arr, mid + 1, right);// 合并操作int* temp = (int*) malloc((right-left)* sizeof(int));merge(arr,temp,left,mid,right);free(temp);
}

2、合并 

/*** 合并操作*/void merge(int *arr,int* temp,  int left, int mid, int right){printf("合并索引: left=%d,mid=%d,right=%d\n", left, mid, right);int i = left;int j = mid + 1;int k = 0;// 合并两个有序数组到temp数组中while (i <= mid && j <= right) {if (arr[i] <= arr[j]) {temp[k++] = arr[i++];} else {temp[k++] = arr[j++];}}// 把左边剩余元素填充进temp数组中for (; i <= mid; i++) {temp[k++] = arr[i];}// 把右边剩余元素填充进temp数组中for (; j <= right; j++) {temp[k++] = arr[j];}
// 把temp数组中的元素拷贝回原数组中k = 0;int tempLeft = left;while (tempLeft <= right) {arr[tempLeft++] = temp[k++];}
}

3、测试

    int arr[] = {11,15,3,5,9,80,90,73,50,66};int len = sizeof(arr)/sizeof(arr[0]);merge_sort(arr, 0, len-1);

http://www.xdnf.cn/news/3152.html

相关文章:

  • 【单例模式】简介
  • 力扣-数组-189轮转数组
  • Kafka-可视化工具-Offset Explorer
  • Android Framework框架与启动过程初识一
  • 三个概念:DataBinding,Dependency Property 与DataTemplate
  • C#静态类与单例模式深度解析(七):从原理到工业级应用实践
  • iview 如何设置sider宽度
  • 论文阅读:2024 arxiv Jailbreaking Black Box Large Language Models in Twenty Queries
  • 17、商品管理:魔药商店运营——React 19 CRUD实现
  • 【Unity C#从零到精通】项目深化:构建核心游戏循环、UI与动态敌人系统
  • ASP.NET MVC后端控制器用模型 接收前端ajax数据为空
  • Copilot总结Word长文档功能更新升级
  • Elasticsearch--自带“搜索引擎“的数据库
  • uniapp 实现低功耗蓝牙连接并读写数据实战指南
  • 2025年“深圳杯”数学建模挑战赛C题-分布式能源接入配电网的风险分析
  • a-upload组件实现文件的上传——.pdf,.ppt,.pptx,.doc,.docx,.xls,.xlsx,.txt
  • Electron Forge【实战】带图片的 AI 聊天
  • 罗技K580蓝牙键盘连接mac pro
  • C# 面向对象实例演示
  • 开源项目实战学习之YOLO11:ultralytics-cfg-models-fastsam(九)
  • Mysql主从复制到分库分表再到读写分离
  • 详解操作系统是如何管理计算机软硬件资源的,以及Linux中进程状态的观察与解释
  • 串口驱动打印下载官网
  • AimRT 从零到一:官方示例精讲 —— 二、HelloWorld示例.md
  • OpenCV-Python (官方)中文教程(部分一)_Day18
  • UVA1537 Picnic Planning
  • transform-实现Encoder 编码器模块
  • NFS-网络文件系统
  • 【codeforces 2086d】背包+组合数学
  • Java之BigDecimal