分治算法-归并排序
来源:互联网 发布:中国网络黑市 编辑:程序博客网 时间:2024/05/12 23:38
问题描述:
输入:待排序列r[n],待排区间[s,t];
输出:升序序列r[s]~r[t];
分析:
1:划分;
2:求解子问题;
3:合并;
归并排序首先执行划分过程,直到子序列长度为1,再在回溯的过程中排序。在merge_()函数中,由于回溯回来的两个子序列已经有序,所以只需依次取出两者中最小值中的较小者即可。
#include <iostream>using namespace std;void Mergesort(int r[],int s,int t);void merge_(int r[],int s,int m,int t);int r[10010],r1[10010];int main(){ int n,i; cin>>n; for(i=0;i<n;i++) cin>>r[i]; Mergesort(r,0,n-1); for(i=0;i<n;i++) cout<<r[i]<<" "; cout<<endl; return 0;}void Mergesort(int r[],int s,int t){ if(s == t) return ; else { int m = (s+t)/2; Mergesort(r,s,m); Mergesort(r,m+1,t); merge_(r,s,m,t); for(int i=s;i<=t;i++) r[i] = r1[i]; }}void merge_(int r[],int s,int m,int t){ int i=s,j=m+1,k=s; while(i<=m && j<=t) { if(r[i] <= r[j]) r1[k++]=r[i++]; else r1[k++]=r[j++]; } while(i<=m) r1[k++]=r[i++]; while(j<=t) r1[k++]=r[j++];}
1 0
- 分治算法--归并排序
- 分治算法-归并排序
- 分治算法-归并排序
- 算法--分治归并排序
- 归并排序-分治算法
- 分治算法---归并排序
- 分治算法实现归并排序
- 分治算法: 归并排序(详解)
- 分治算法之归并排序
- 分治算法之归并排序
- 分治算法之归并排序
- 归并排序(分治算法)
- 【算法】分治法(快速排序,归并排序)
- 分治法之归并排序算法
- 分治算法一(归并排序)
- 【算法导论】分治法及归并排序
- 分治法 归并排序(递归算法)
- js算法:分治法-归并排序
- USACO-Section 3.2 Sweet Butter(最短路[Dijkstra])
- Unable to process Jar entry XXXXX
- 分治算法-归并排序
- SAS如何在不排序的情况下使用by语句
- 腾讯2016春招模拟笔试题 —— 编程题(3道)
- 分治算法-归并排序
- VirtualBox network / study environment setup for RHEL
- Excel插件制作-面积图系列
- Sqlite3一些常用函数的分析与自己理解
- Hive连接Mysql---FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask.
- c++初学者笔记
- socket中的短连接与长连接,心跳包示例详解
- Clojure的Maven配置
- 把div固定于页面脚部(代码)