归并排序
来源:互联网 发布:流量免费打电话软件 编辑:程序博客网 时间:2024/06/10 07:57
归并排序利用递归和分治技术将数据序列划分为越来越小的半子表,在对半子表排序,最后在用递归将排序好的半子表合并成为越来越大的有序数组。 时间复杂度为:O(nlogn)。
程序代码:
#include<iostream>using namespace std;void Merge(int a[],int l,int q,int r){int i,j,k,nl,nr;nl=q-l+1;nr=r-q;int *L=new int[nl];int *R=new int[nr];for(i=0,k=l;i<nl;i++,k++)L[i]=a[k];for(i=0,k=q+1;i<nr;i++,k++)R[i]=a[k];for(k=l,i=0,j=0;i<nl&&j<nr;k++){if(L[i]>R[j]){a[k]=R[j];j++;}else{a[k]=L[i];i++;}}if(i<nl){for(j=i;j<nl;j++,k++)a[k]=L[j];}if(j<nr){for(i=j;i<nr;i++,k++)a[k]=R[i];}delete L;delete R;}void Mergesort(int a[],int l,int r){if(l<r){int q=(l+r)/2;Mergesort(a,l,q);Mergesort(a,q+1,r);Merge(a,l,q,r);}}void Show(int *a,int n){for(int i=0;i<n;i++)cout<<a[i]<<" ";cout<<endl;}int main(){int i=0;int a[]={1,3,5,7,9,2,4,6,8,0};int length_a=sizeof(a)/sizeof(a[0]);cout<<"排序前:";Show(a,length_a);Mergesort(a,0,length_a-1);cout<<"排序后:";Show(a,length_a);cout<<endl;system("pause");return 0;}
0 0
- 归并排序-归并排序
- 归并和归并排序
- 归并与归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 排序::归并
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- Android 方向传感器与磁力计和加速度传感器之间的关系
- JavaScript中Array对象方法初探
- 网购时代,大商书写消费者权益保护新篇章
- Android 异步消息处理机制 让你深入理解 Looper、Handler、Message三者关系
- 远程调试(Remote Debugging)
- 归并排序
- 从估值一亿到一夜分家:一个曾经存在过的教育产品的故事
- Java基本类型包装类的缓存机制的自我理解
- 浏览器版本检测
- 生,嫡女翻身计
- 信息发布
- 嵌入式warning fix
- 结构体对齐问题
- 项目总结(三)----------Python实现SSH远程登陆,并执行命令!