算法设计与分析 合并排序的递归实现算法
来源:互联网 发布:阿里云短信发送频率 编辑:程序博客网 时间:2024/05/16 04:55
合并排序的递归实现算法。
输入:先输入进行合并排序元素的个数,然后依次随机输入(或随机生成)每个数字。
输出:元素排序后的结果,数字之间不加任何标识符。
示
//合并排序 递归#include<iostream>using namespace std;template<class Type>void Merge(Type c[], Type d[], int l, int m, int r){int i = l, j = m + 1, k = l;while ((i <= m) && (j <= r)){if (c[i] <= c[j]){d[k++] = c[i++];}else{d[k++] = c[j++];}}if (i>m){for (int q = j; q <= r; q++){d[k++] = c[q];}}else{for (int q = i; q <= m; q++){d[k++] = c[q];}}}template<class Type>void MergeSort(Type a[], Type b[], int left, int right){if (left<right){int i = (left + right) / 2;MergeSort(a, b, left, i);MergeSort(a, b, i + 1, right);Merge(a, b, left, i, right);for (int i = left; i <= right; i++){a[i] = b[i];}}}int main(){int n, data[100], result[100];cout << "请输入数组的长度" << endl;cin >> n;cout << "请输入数组" << endl;for (int i = 0; i < n; i++){cin >> data[i];result[i] = data[i];}MergeSort(data, result, 0, n - 1);for (int i = 0; i < n; i++){cout << data[i] << " ";}cout << endl;system("pause");return 0;}
//合并排序非递归版#include<iostream>using namespace std;template<class Type>void Merge(Type c[], Type d[], int l, int m, int r){int i = l, j = m + 1, k = l;while ((i <= m) && (j <= r)){if (c[i] <= c[j]){d[k++] = c[i++];}else{d[k++] = c[j++];}}if (i>m){for (int q = j; q <= r; q++){d[k++] = c[q];}}else{for (int q = i; q <= m; q++){d[k++] = c[q];}}}template<class Type>void MergePass(Type x[],Type y[],int s,int n){int i=0;while(i<=n-2*s){Merge(x,y,i,i+s-1,i+2*s-1);i=i+2*s;}if(i+s<n)Merge(x,y,i,i+s-1,n-1);else for(int j=i;j<=n-1;j++)y[j]=x[j];}template<class Type>void MergeSort(Type a[], int n){Type *b =new Type[n];int s=1;while(s<n){MergePass(a,b,s,n);s+=s;MergePass(b,a,s,n);s+=s;}}int main(){int n, data[100];cout << "请输入数组的长度" << endl;cin >> n;cout << "请输入数组" << endl;for (int i = 0; i < n; i++){cin >> data[i];}MergeSort(data,n);for (int i = 0; i < n; i++){cout << data[i] << " ";}cout << endl;system("pause");return 0;}
阅读全文
0 0
- 算法设计与分析 合并排序的递归实现算法
- 算法设计与分析 快速排序的递归实现算法
- 合并排序/归并排序(递归与分治)-算法设计与分析
- 【算法设计与分析】4、合并排序
- 合并排序的递归实现算法
- 【算法设计】合并排序、自然合并排序与快速排序算法的Java实现
- 算法设计与分析 Ackerman函数的递归实现算法
- 算法设计与分析 全排列的递归实现算法
- 算法设计与分析 整数划分的递归实现算法
- 合并排序的递归算法
- 算法设计与分析笔记——合并排序
- 算法设计与分析:第二章 递归 2.6基于递归的插入排序
- 算法分析与设计-01-Fibonacci数列的递归算法
- 算法分析与设计-02-勒让德多项式的递归算法
- 合并排序的非递归算法
- 合并排序算法(非递归)
- 合并排序(非递归算法)
- JAVA 合并排序(递归算法)
- react 中随state状态改变,数据在dom中渲染问题
- Servlet之Filter深入讲解及实例研究
- ThinkPHP的MVC模式和URL访问
- 6000G精品IT教程资源合集 java分布式高并发架构师视频教程 Python教程视频合集 云计算大数据视频教程
- 1294: 简单统计
- 算法设计与分析 合并排序的递归实现算法
- Cocos2dx------从json文件读取数据
- SQLite约束以及连接
- 算法 埃氏筛法求素数个数
- Kotlin入门(4)声明与操作数组
- 如何快速转载CSDN中的博客
- ARP局域网断网攻击原理分析及演示
- 打包jar插件配置 java -jar xxx.jar可执行
- 史上最全的Maven Pom文件标签详解