归并排序(包括完整代码)
创作时间:
作者:
@小白创作中心
归并排序(包括完整代码)
引用
CSDN
1.
https://blog.csdn.net/Chenqin1879/article/details/140875935
归并排序是一种采用分治策略进行排序的算法,而分治的本质是将一个大规模的问题分解为若干规模较小的相同子问题,分而治之。
由于排序问题给定的是一个无序序列,所以可以把待排序元素分解成两个规模大致相等的子序列,如果不易解决,则将得到的子序列继续分解,直到子序列包含的元素个数为1(因为单个元素的序列本身就是有序的),此时就可以进行合并,从而得到一个完整的有序序列。以序列(42,15,20,6,8,38,50,12)为例:
从上图可以看出,首先将待排序元素分成大小大致相同的两个子序列,然后把子序列分成两个大小大致相同的两个子序列,如此下去,直到分解成一个元素时为止,这时含有一个元素的子序列就是有序的。然后再执行合并操作,将两个有序的子序列合并成一个有序序列,如此下去,制直到所有的元素都合并为一个有序序列时为止。
具体代码如下:
#include<bits/stdc++.h>
using namespace std;
void he(int A[],int low,int mid,int high){
int *B=new int[high-low+1];//申请一个动态数组进行辅助
int i=low,j=mid+1,k=0;
while(i<=mid&&j<=high){//按从小到大的顺序放入辅助数组中
if(A[i]<=A[j])
B[k++]=A[i++];
else
B[k++]=A[j++];
}
while(i<=mid) B[k++]=A[i++];//将数组中剩下的元素放入辅助数组中
while(j<=high) B[k++]=A[j++];
for(i=low,k=0;i<=high;i++,k++){//将排序好的辅助数组复制到原数组中
A[i]=B[k];
}
delete[] B;//释放内存空间
}
void fen(int A[],int low,int high){
if(low<high){
int mid=(low+high)/2;//取中点
fen(A,low,mid);//对A[low:mid]中的元素合并排序
fen(A,mid+1,high);//对A[mid+1:high]中的元素合并排序
he(A,low,mid,high);//合并
}
}
int main(){
int a[1005];
int n;
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i];
}
fen(a,0,n-1);//调用函数
for(int i=0;i<n;i++){
cout<<a[i]<<" ";
}
}
热门推荐
体型水温食性都不同,小金鱼孔雀鱼不宜混养
西京医院团队揭示心脏健康关键蛋白新机制
手机无线连接打印机:从设置到打印的完整指南
冬季补钙正当时:罗盖全使用全攻略
石墨烯远红外疗法新发现:可促进运动能力和代谢功能
日本团队创新细菌培养方法,AUN联合体抗癌效果显著
从基础检查到智能管理:现代企业设备维护指南
除了里程,这些因素也决定着机油更换时机
耳炎的症状有哪些 耳朵发炎的种类及原因 治疗方法
研究揭示:逻辑思维能力低下者患认知症风险翻倍
自动挡汽车档位操作指南:如何合理使用各档位?
藏贝母,冬季呼吸系统的守护神
色盲考驾照被拒引热议:安全与公平如何平衡?
告别冬季唇部干裂:蜂蜜的三大护肤功效与使用指南
珠海科技学院:10%毕业生升学,计算机制药双轮驱动
川西自驾游:色达至甘孜167公里,455省道秋日风光绝美
天使鱼:优雅易养的观赏鱼,从环境到繁殖的完整指南
遭遇不公正辞退?劳动仲裁帮你讨回“被消费”的权益
《书谱》受书坛推崇之因:4位书法大师的独到见解
广式烧鸭腿制作详解:腌料配方到烤制技巧
逍遥丸配合西药治疗抑郁症,临床研究显示效果更佳
肉桂卷:香甜柔软的冬日暖心甜点
《清明上河图密码》终于定档了,周一围给张颂文作配,这剧要火!
家用台式机选购全攻略:12项关键配置详解
家庭照明设计指南:筒灯与射灯的布局逻辑全解析
洞穴盐疗:中欧结合的新型呼吸系统保健疗法
这些年我们用过的血糖仪
普洱茶冲泡高级技巧:从水温到茶具,8个关键步骤详解
北京北站到大兴机场:地铁大巴如何选?运营时间全解析
年龄越大越要护肝:6大生活方式助你保持肝脏健康