八大内部排序 -- 归并排序
来源:互联网 发布:网络大仲马什么意思 编辑:程序博客网 时间:2024/05/21 14:54
归并排序(merge-sort):将两个或两个以上的有序列表组合成一个新的有序表,合并的m,n长度的两个表的复杂度为O(m+n),n个数的序列进行归并共有ceil(logn)次,每一次合并都是n常数级别的,所以总的复杂度为O(nlogn)。同时归并排序是一种稳定的排序。
代码如下,采用的是利用递归的方式书写,要对递归的工作方式要有比较深刻的理解哦。。
#include <iostream>using namespace std;void print(int *a,int n){ for(int i=1;i<=n;i++){ cout<<a[i]<<" "; } cout<<endl;}void Merge(int*sr,int*& tr,int i,int m,int n){ // 将有序表sr[i...m],sr[m+1...n]合并成tr[i...n] int k,j; for(j=m+1,k=i;j<=n&&i<=m;k++){ if(sr[i]<sr[j]){ tr[k]=sr[i++]; }else{ tr[k]=sr[j++]; } } while(i<=m){ tr[k++]=sr[i++]; } while(j<=n){ tr[k++]=sr[j++]; }}void Msort(int* sr,int*& tr,int s,int t){ // 将表sr[s....t]归并成有序表tr[s....t] if(s==t) tr[s]=sr[s]; else{ int m = (s+t)/2; int *mr = new int[t+1]; Msort(sr,mr,s,m); Msort(sr,mr,m+1,t); Merge(mr,tr,s,m,t); }}void Merge_sort(int *a,int n){ Msort(a,a,1,n);}int main(){ int *a; int n; cin>>n; a= new int[n+1]; for(int i=1;i<=n;i++){ cin>>a[i]; } Merge_sort(a,n); print(a,n); return 0;}
0 0
- 八大内部排序 -- 归并排序
- 八大排序--归并排序
- 八大排序--归并排序
- 八大排序---归并排序
- 八大排序算法-归并排序
- 八大排序之归并排序
- 八大排序算法--归并排序
- 八大排序算法-归并排序
- 八大内部排序算法
- 内部 八大排序算法
- 八大内部排序--希尔排序
- 八大内部排序--快速排序
- 八大内部排序 -- 选择排序
- 八大内部排序 -- 堆排序
- 内部排序之归并排序
- 内部排序—归并排序
- 内部排序算法:归并排序
- 内部排序之 归并排序
- 我的第一篇博客
- Appium 测试遇到问题解决方案
- 51nod 1276 【离线处理】
- BeautifulSoup简单的自助抓取一点信息
- python学习笔记【1】(第二章:python的基础语法)
- 八大内部排序 -- 归并排序
- Expect工具语言
- JDK7与JDK8中HashMap的实现
- Android群英传学习笔记(1)--Android体系与系统架构
- 设计与声明(一)
- 51nod 1004 【快速幂】
- 如何加入tomcat这个服务器到eclipse中
- 工作计划
- RabbitMQ (一)入门 Helloworld