二路归并排序
”2路“归并,把两个已经有序的序列合并成一个。
核心操作:把数组内的两个有序序列归并成一个。
- 空间复杂度O(n)
- 时间复杂度O(nlog2n)
//归并排序
int *B = (int *)malloc (n * sizeof(int)); //定义足够大的数组B
void Merge(int A[], int low, int mid, int high){
int i,j,k;
for(k=low; k<=high; k++){ //将A复制给B
B[k] = A[k];
}
for(i=low, j=mid+1, k=i; i<mid && j<=high; k++){ //将B中的元素均分,排序插入A
if(B[i]<=B[j])
A[k] = B[i++];
else
A[k] = B[j++];
}
//继续排序没有排序完的子序列
while(i<=mid) A[k++] = B[i++];
while(j<=high) A[k++] = B[j++];
}
void MergeSort(int A[], int low, int high){
if(low<high){
int mid = (low+high)/2;
//对子序列排序
MergeSort(A, low, mid);
MergeSort(A, mid+1, high);
//递归调用
MergeSort(A, low, mid, high);
}
}
作者:Jace Jin
github地址:https://github.com/buxianghua
原创文章版权归作者所有.
欢迎转载,转载时请在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
欢迎转载,转载时请在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· AI与.NET技术实操系列(六):基于图像分类模型对图像进行分类