[一步一步写算法导论]合并排序
2014-10-13 23:04
162 查看
1.伪码
第一部分,将两个子串合并的算法
第二部分,递归分化,然后子串合并
2.c++代码
第一部分,将两个子串合并的算法
第二部分,递归分化,然后子串合并
2.c++代码
// MergeSort.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <iostream> #include <vector> using namespace std; vector<int> A; void Merge(vector<int >&A,int p,int q,int r){ int n1 = q - p + 1; int n2 = r - q ; vector<int> L(n1); vector<int> R(n2); for (int i = 0; i < n1; i++) { L[i] = A[p + i]; } for (int i = 0; i < n2; i++) { R[i] = A[q +1+ i]; } int i = 0; int j = 0; int k = 0; for (k = p; k < r && i < n1 && j < n2; k++) { if (L[i]<=R[j]) { A[k] = L[i]; i++; } else { A[k] = R[j]; j++; } } while (i< n1) { A[k++] = L[i++]; } while (j< n2) { A[k++] = R[j++]; } } void MergeSort(vector<int>&A,int p,int r){ if (p< r) { int q = (p + r) / 2; MergeSort(A, p, q); MergeSort(A, q + 1, r); Merge(A, p, q, r); } } int _tmain(int argc, _TCHAR* argv[]) { A = { 5, 2, 4, 7, 1, 2, 3, 6 }; for (auto it = A.begin(); it < A.end();it++) { cout << *it << " "; } MergeSort(A, 0, 7); cout << endl; for (auto it = A.begin(); it < A.end(); it++) { cout << *it << " "; } return 0; }
相关文章推荐
- [多图预警详细演示一步一步写算法导论] 冒泡排序
- [多图预警详细演示一步一步写算法导论]插入排序
- 一步一步写算法(之合并排序)
- 学习算法导论-合并排序
- 一步一步写算法(之合并排序)(转)
- 一步一步写算法(之合并排序)
- 一步一步写算法(之合并排序)
- 【算法导论】第i小的元素
- 算法导论例程——堆排序(大根堆为例)
- 算法导论学习笔记(三)红黑树
- 链表的多重数组表示(算法导论10-3)
- 【算法导论】二叉树的建立
- 一步一步写算法(之快速排序)
- 算法导论17.1-3
- 一步一步写算法(之hash表)
- BST 二叉搜索树 C++ 算法导论
- 算法导论之线性时间排序(2)
- 归并排序的c语言代码--算法导论一致
- 算法导论程序38--最长公共子序列(Python)
- 算法导论 ch14 数据结构的扩张 区间树