当前位置:网站首页>归并排序
归并排序
2022-08-08 06:29:00 【物联网布道者】
归并排序
算法简介
归并排序是一种将递归和分治结合到一起实现的一种排序算法。将一个序列通过递归拆分为越来越小的半子序列,然后再对半子序列合并为 一个大的有序序列。
算法思想
归并排序算法可以分为递归和归并两部分。首先对一个序列进行递归,要将一个序列排序,先要将序列的前半部分排序,然后再将序列的后半部分,要排序前半部分又将前半部分分为两部分,依次递归。。。 当递归到一个元素的时候,不用排序,一个元素本身已经是有序的了。然后便是合并操作,将左右两个有序的序列合并为一个序列,然后一级一级递归,直到整个序列合并完成。
归并排序图解如下:
代码示例
//将数组arr中[l,r]内的元素进行归并
void merge(int arr[], int l,int r)
{
int* temp = (int*)malloc(sizeof(int)*(r-l+1));
memcpy(temp,arr+l,sizeof(int)*(r-l+1));
int middle = (l+r)/2;
int indexl=l,indexr = middle+1;
for(int i=l;i<=r;i++){
if(indexl > middle){
arr[i] = temp[indexr-l];
indexr++;
}else if(indexr > r){
arr[i] = temp[indexl-l];
indexl++;
}else if(temp[indexl-l] > temp[indexr-l]){
arr[i] = temp[indexr-l];
indexr++;
}else{
arr[i] = temp[indexl-l];
indexl++;
}
}
}
//将数组arr中的[l,r]区间内的元素进行排序
void MergeSort(int arr[], int l,int r)
{
if(l>=r) return;
int mid = (l+r)/2;
MergeSort(arr,l,mid);
MergeSort(arr,mid+1,r);
merge(arr,l,r);
}
边栏推荐
猜你喜欢
每日一题Day40-41
Task01 文件处理与邮件自动化
DCNN-4mC: Densely connected neural network basedN4-methylcytosine site prediction in multiple speci
物联网安全系列 - 非对称加密算法 ECDH
论文解读:《PST-PRNA:使用蛋白质表面地形和深度学习对RNA结合位点的预测》
使用websocket实现服务端主动发送消息到客户端
数据链路层------基于TCP/IP五层模型
【网络安全】SSL Pinning及其绕过
Math工具类的ceil()、floor()、round()方法源码阅读
Unity_扇形图(饼状图)+ UI动画
随机推荐
栈-实现一个简单的静态栈
日常用到的开源软件列表
Golang 简单的读负载均衡
用栈模拟队列
“抽象类”与“接口”有什么区别?
Kubernetes | 01.Kubenetes简介
tcpdump进行DNS抓包
Nine common interfaces for implementing sequence table in C language
性能测试------LoadRunner
【服务器运维】忘记XShell 服务器口令
使用js写一个2048
论文翻译:《6mAPred-MSFF:基于多尺度特征融合机制预测跨物种DNA N6-甲基腺嘌呤位点的深度学习模型》
蓝牙5.2新特性 - LEPC简介
Excel文件解析
受邀全球互联网技术大会分享
网络安全笔记第二天day2(等级保护)
异常捕获,生成器对象
脑筋急转弯
websocket结合消息队列完成多台服务器下的订单服务主动通知
seata什么时候支持sqlserver xa呀?