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

归并排序算法

      归并排序采用分治的思想,现将数组分裂成更小的单元,将小单元的先进性排序,然后逐次合并,启时间复杂度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);

相关文章:

  • 第六章 流量特征分析-常见攻击事件 tomcat wp
  • Nginx — http、server、location模块下配置相同策略优先级问题
  • react-11使用vscode开发react相关扩展插件(相关的快捷生成)
  • 用Playwright自动化网页测试,不只是“点点点”
  • 大型连锁酒店集团数据湖应用示例
  • 深度解析 MindTorch:无缝迁移 PyTorch 到 MindSpore 的高效工具
  • Centos离线安装Docker(无坑版)
  • 硬件工程师面试常见问题(10)
  • [250430] Kali Linux 存储库密钥丢失导致所有用户无法正常更新 APT
  • 如何使用C语言手搓斐波那契数列?
  • 【数学建模国奖速成系列】优秀论文绘图复现代码(二)
  • OCR身份证识别(正反面)_个人证照OCR识别_开放API接口使用指南
  • AI重构家居营销新范式:DeepSeek如何破解行业流量与转化困局?
  • 在pycharm中创建Django项目并启动
  • 在 API 模拟阶段:Apipost vs. Faker.js vs. Postman —— 为什么 Apipost 是最优选择
  • 科学数据可视化工具库visIt安装和使用
  • 「动态规划::背包」01背包 / AcWing 2(C++)
  • 解决 RN Switch 组件在安卓端样式很丑的问题
  • Databend 产品月报(2025年4月)
  • 人工智能数学基础(六):数理统计
  • 神十九都带回了哪些实验样品?果蝇等生命类样品已交付科学家
  • 两部门调度部署“五一”假期安全防范工作,要求抓好旅游安全
  • 新型算法助力听障人士听得更清晰
  • 北京银行一季度净赚超76亿降逾2%,不良贷款率微降
  • 比熬夜更伤肝的事,你可能每天都在做
  • 上海74岁老人宜春旅游时救起落水儿童,“小孩在挣扎容不得多想”