2.3.1-分治法-归并排序
2017-08-11 20:03
134 查看
、
#include <iostream> #include <cstring> #include <cstdio> #include <algorithm> #include <string> #include <string.h> #include <cmath> #include <sstream> #include <set> #include <map> #include <functional> #include <queue> #include <vector> using namespace std; const int maxn = 1e9; int A[20] = { 0,0,0,0,0,0,0,0,0,5,2,4,7,1,3,2,6}; int L[20], R[20]; void MergeSort(int p,int q,int r) { int i, j, k; int n1 = q - p+1; int n2 = r - q; for (i = 1; i <= n1; i++) L[i] = A[p + i - 1]; for (i = 1; i <= n2; i++) R[i] = A[q + i]; L[n1 + 1] = maxn; R[n2 + 1] = maxn; i = j = 1; for (k = p; k <= r; k++) { if (L[i] <= R[j]) { A[k] = L[i]; i++; } else { A[k] = R[j]; j++; } } } void Merge(int p, int r) { if (p < r) { int q = (p + r) / 2; Merge(p, q); //排序左半部分 Merge(q+1, r); //排序右半部分 MergeSort(p, q, r); } } int main() { Merge(9,16); for (int i = 9; i <= 16; i++) cout << A[i] << " "; system("pause"); }
练习2.3-2 另外一种不采用哨兵的MergeSort #include <iostream> #include <cstring> #include <cstdio> #include <algorithm> #include <string> #include <string.h> #include <cmath> #include <sstream> #include <set> #include <map> #include <functional> #include <queue> #include <vector> using namespace std; const int maxn = 1e9; int A[11] = {9,8,7,6,5,4,3,2,1,0 ,-1}; int L[20], R[20]; void MergeSort(int p,int q,int r) { int i,j,k,n1,n2; n1=q-p+1; n2=r-q; // cout<<n1<<" "<<n2<<endl; for(i=0;i<n1;i++) L[i]=A[p+i]; for(i=0;i<n2;i++) R[i]=A[q+i+1]; for(i=0,j=0,k=p;k<=r;k++) { if(i==n1) A[k]=R[j++]; else if(j==n2) A[k]=L[i++]; else if(L[i]<=R[j]) A[k]=L[i++]; else A[k]=R[j++]; } } void Merge(int p,int r) { if(p<r) { //cout<<p<<" "<<" "<<r<<endl; int mid=(p+r)/2; Merge(p,mid); Merge(mid+1,r); MergeSort(p,mid,r); } } int main() { Merge(0,9); for(int i=0;i<10;i++) cout<<A[i]<<" "; cout<<endl; }
相关文章推荐
- 分治法——思想到使用——归并排序、快速排序
- 分治法之归并排序
- 分治法-归并排序
- 分治法-归并排序
- 分治法-归并排序
- 分治法 归并排序 加上逆序数求法
- 分治法对最大连续和以及归并排序,分治与递归实质把问题区间区域分割成几个小区间或者小分区,一直下钻到一个元素小区解决问题
- 分治法之归并排序
- 分治法,归并排序
- 【算法】分治法之归并排序实现
- [Algorithm_Learn_02]分治法之归并排序
- 归并排序(分治法)
- 关于分治法归并排序的个人笔记
- 分治法之归并排序
- 分治法(归并排序)
- 分治法-归并排序
- 归并排序-分治法
- 分治法与归并排序
- 2.3.1分治法(算法导论 学习)
- 老生常谈——分治法与归并排序