归并排序
来源:互联网 发布:天龙八部发色数据女生 编辑:程序博客网 时间:2024/06/06 19:37
描述:
给定一个数列,用归并排序算法把它排成升序。
输入:
第一行是一个整数n(n不大于10000),表示要排序的数的个数;
下面一行是用空格隔开的n个整数。
输出:
输出排序后的数列,每个数字占一行。
输入样例:
53 2 1 4 5
输出样例:
1234
5
#include <iostream>using namespace std;int a[10000];int temp[10000];void MergeArray(int a[], int first, int mid, int last, int temp[]){ int i = first; //迭代遍历左有序 int j = mid+1; //迭代遍历右有序 int m = mid , n = last; int k = 0; //迭代临时数组 //左边或者右边遍历完毕 while(i <= m && j <= n) { if(a[i] <= a[j]) temp[k++] = a[i++]; else temp[k++] = a[j++]; } //若是右边遍历完毕 while(i <= m) temp[k++] = a[i++]; //若是左边遍历完毕 while(j <= n) temp[k++] = a[j++]; for(i = 0; i < k; i++) a[first+i] = temp[i];}//first,last为归并数组的下标void MergeSort(int a[], int first, int last, int temp[]){ if(first < last) //递归边界 { int mid = (first+last)/2; //divide MergeSort(a, first, mid, temp); //conqure左边,左边有序 MergeSort(a, mid+1, last, temp);//conqure右边,右边有序 MergeArray(a, first, mid , last, temp);//归并两个有序表 }}int main(){ int n; cin >> n; for(int i = 0; i < n; i ++) cin >> a[i]; MergeSort(a, 0, n-1, temp); for(int i = 0; i < n; i++) cout << a[i] << endl; return 0;}
0 0
- 归并排序-归并排序
- 归并和归并排序
- 归并与归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 排序::归并
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- hdu2066 一个人的旅行(最短路)
- Java垃圾收集算法
- 图解Tomcat类加载机制
- Spring属性配置
- Android apk签名整理
- 归并排序
- Android Material Design(6) CircularReveal圆形扩散动画的使用
- C++中引用传递与指针传递区别
- hdu2067 小兔的棋盘
- BZOJ2223PATULJCI
- Servlet 工作原理解析
- 跳台阶
- 一道取球概率题
- 3Dmax制作页游简单草地