归并排序
来源:互联网 发布:hifi音频播放软件 编辑:程序博客网 时间:2024/05/17 02:39
一、归并排序
#include<iostream>using namespace std;class Merge_sort{private:int *a;int n;public:Merge_sort(){}Merge_sort(int N){a=new int[N];n=N;}void get(){for(int i=0;i<n;i++)cin>>a[i];}void sort(){mergesort(0,n-1);}void mergesort(int l,int r){int m=(l+r)/2;if(r<=l)return;mergesort(l,m);mergesort(m+1,r);merge(l,m,r);}void merge(int l,int m,int r){int *p=new int[r-l+1];int i=l,j=m+1,k=0;while(i<=m&&j<=r)p[k++]=(a[i]<a[j]?a[i++]:a[j++]);if(i>m)for(;j<=r;)p[k++]=a[j++];elsefor(;i<=m;)p[k++]=a[i++];for(i=l;i<=r;i++)a[i]=p[i-l];}void print(){for(int i=0;i<n;i++)cout<<a[i]<<" ";cout<<endl;}};int main(){int n;while(cin>>n){Merge_sort a(n);a.get();a.sort();a.print();}return 0;}
时间复杂度:o(nlogn)
空间复杂度:o(n)
是一种稳定排序
二、归并排序强化版
void merge(int l,int m,int r){int *p=new int[r+1];int i,j,k;for(i=m+1;i>l;i--)p[i-1]=a[i-1];for(j=m;j<r;j++)p[r+m-j]=a[j+1];for(k=l;k<=r;k++){if(p[i]<p[j])a[k]=p[i++];else a[k]=p[j--];}}
时间复杂度:o(nlogn)
空间复杂度:o(n)
是一种稳定排序
0 0
- 归并排序-归并排序
- 归并和归并排序
- 归并与归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 排序::归并
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 图片加载与缓存利器(自动缓存)--第三方开源-- Glide
- DataGridView 索引,添加列
- 读书笔记--Intent
- python 网络爬虫(一):世界上最简单的Web浏览器
- JAVA同步容器使用心得
- 归并排序
- online_judge_1135
- 151221 HAoi2015 总结
- (转载)实现QQ侧滑边栏
- pl/sql 自学软件安装及配置
- 【杭电】[2037]今年暑假不AC
- poj 2955 Brackets (区间dp)||(记忆话搜素)
- mycncart操作使用教程 - 横幅广告
- 20151221留言本程序------struts2和Hibernate的应用总结