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

归并排序代码

主程序
int main(int argc, char const *argv[])
{int arr[] = {9,5,2,7};int n= sizeof(arr)/siezof(arr[0]);print_arr(arr,n);//打印数组merge_sort(arr, n);//分类数组print_arr(arr,n);//打印数组return 0;
}
归并排序入口
//归并排序入口
void merge_sort(int arr[], int n)
{//分配辅助数组int *tempArr = (int *)malloc(n* sizeof(int));if(tempArr){msort(arr, tempArr, 0, n-1);free(tempArr);}else{printf("error: failed to allocate memory!");}
}
归并排序
void msort(int arr[], int tempArr[], int left, int right)
{//如果只有一个元素,那么不需要继续划分//只有一个元素的区域,本身就有序,直接归并if(left < right){//找中间点int mid = (left + right)/2;//递归划分左半区msort(arr, tempArr,left, mid);//递归划分右半区msort(arr, tempArr,mid+1, right);//合并已经排序部分merge(arr, tempArr,left, mid, right);}
}
合并

void merge(int arr[], int tempArr[], int left, int mid, int right)
{//标记左半区第一个未排序的元素int l_pos = left;//标记右半区第一个未排序的元素int r_pos = mid + 1;//联合数组元素的下标int pos = left;//合并while(l_pos <= mid && r_pos <= right){if(arr[l_pos] < arr[r_pos])tempArr[pos++] = arr[l_pos++];		//左半区剩余元素更小else tempArr[pos++] = arr[r_pos++];		//右半区剩余元素更小}//合并左半区剩余的元素while(l_pos <= mid){tempArr[pos++] = arr[l_pos++];		//左半区剩余元素更小}//合并右半区剩余的元素while(r_pos <= right){tempArr[pos++] = arr[r_pos++];		//右半区剩余元素更小}//把临时数组中合并后的元素复制回原来的数组while(left <= right){arr[left] = tempArr[left]; left++;}
}
打印
void print_arr(int arr[], int n)
{for(int i =0;i<n; i++){printf("%d ",arr[i]);}
putchar('\n');
}

 整体代码附上

#include <stdio.h>
#include <stdlib.h>void print_arr(int* arr, int n)
{for(int i =0;i<n; i++){printf("%d ",arr[i]);}putchar('\n');
}void merge(int arr[], int tempArr[], int left, int mid, int right)
{//标记左半区第一个未排序的元素int l_pos = left;//标记右半区第一个未排序的元素int r_pos = mid + 1;//联合数组元素的下标int pos = left;//合并while(l_pos <= mid && r_pos <= right){if(arr[l_pos] < arr[r_pos])tempArr[pos++] = arr[l_pos++];		//左半区剩余元素更小else tempArr[pos++] = arr[r_pos++];		//右半区剩余元素更小}//合并左半区剩余的元素while(l_pos <= mid){tempArr[pos++] = arr[l_pos++];		//左半区剩余元素更小}//合并右半区剩余的元素while(r_pos <= right){tempArr[pos++] = arr[r_pos++];		//右半区剩余元素更小}//把临时数组中合并后的元素复制回原来的数组while(left <= right){arr[left] = tempArr[left]; left++;}
}void msort(int arr[], int tempArr[], int left, int right)
{//如果只有一个元素,那么不需要继续划分//只有一个元素的区域,本身就有序,直接归并if(left < right){//找中间点int mid = (left + right)/2;//递归划分左半区msort(arr, tempArr, left, mid);//递归划分右半区msort(arr, tempArr, mid+1, right);//合并已经排序部分merge(arr, tempArr, left, mid, right);}
}//归并排序入口
void merge_sort(int arr[], int n)
{//分配辅助数组int *tempArr = (int *)malloc(n * sizeof(int));if(tempArr){msort(arr, tempArr, 0, n-1);free(tempArr);}else{printf("error: failed to allocate memory!");}
}int main(int argc, char const *argv[])
{int arr[] = {9,5,2,7};int n=sizeof(arr)/sizeof(arr[0]);print_arr(arr,n);//打印数组merge_sort(arr, n);//分类数组print_arr(arr,n);//打印数组return 0;
}

相关文章:

  • SD卡无法读取?原因分析与数据恢复策略
  • 网络安全法视角下的等保测评重要性与合规路径
  • 一文带你了解集装箱箱号识别原理,OCR识别及深度学习
  • 鸿枫网盘,文件夹面包屑跳转实现功能
  • 卡码网KamaCoder 98. 所有可达路径
  • 【STM32-新建工程-CubeMX】
  • 如何自制一个Spring Boot Starter并推送到远端公服
  • 【ARMv8/ARMv9 硬件加速系列 2.2 -- ARM NEON 的加减乘除(左移右移)运算】
  • 新手教学系列——“笑看”单元测试(pytest)
  • 【人工智能】—XGBoost算法在构建互联网防火墙异常行为识别模型应用案例
  • AcWing 1801:蹄子剪刀布 ← 模拟题
  • 「51媒体」活动会议,展览展会,直播曝光的一种方法
  • Eclipse 工作空间:深入解析与高效使用
  • rk3568 Android 11在系统怎样执行命令获取SN号
  • C语言入门系列:特殊的main函数和exit函数
  • [数据结构]链表的实现在PHP中
  • [译] 怎样写一个基础的编译器
  • [译]如何构建服务器端web组件,为何要构建?
  • 5、React组件事件详解
  • android图片蒙层
  • Android组件 - 收藏集 - 掘金
  • Facebook AccountKit 接入的坑点
  • IP路由与转发
  • Java多态
  • Linux编程学习笔记 | Linux多线程学习[2] - 线程的同步
  • Quartz初级教程
  • Spring Cloud中负载均衡器概览
  • 浮动相关
  • 算法---两个栈实现一个队列
  • 微信开源mars源码分析1—上层samples分析
  • 小试R空间处理新库sf
  • 《天龙八部3D》Unity技术方案揭秘
  • 完善智慧办公建设,小熊U租获京东数千万元A+轮融资 ...
  • # Swust 12th acm 邀请赛# [ A ] A+B problem [题解]
  • (1/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (2022版)一套教程搞定k8s安装到实战 | RBAC
  • (4)STL算法之比较
  • (pytorch进阶之路)扩散概率模型
  • (zz)子曾经曰过:先有司,赦小过,举贤才
  • (二)JAVA使用POI操作excel
  • (附源码)spring boot公选课在线选课系统 毕业设计 142011
  • (附源码)spring boot校园健康监测管理系统 毕业设计 151047
  • (附源码)springboot码头作业管理系统 毕业设计 341654
  • (十三)Maven插件解析运行机制
  • (十一)c52学习之旅-动态数码管
  • (一)python发送HTTP 请求的两种方式(get和post )
  • (一)spring cloud微服务分布式云架构 - Spring Cloud简介
  • (转)甲方乙方——赵民谈找工作
  • *(长期更新)软考网络工程师学习笔记——Section 22 无线局域网
  • .Net 6.0 处理跨域的方式
  • .NET Core 版本不支持的问题
  • .NET Core 通过 Ef Core 操作 Mysql
  • .NET Micro Framework初体验(二)
  • .net 按比例显示图片的缩略图
  • .net 调用php,php 调用.net com组件 --