[一步一步写算法导论]合并排序

来源:互联网 发布:淘宝没发货退款要多久 编辑:程序博客网 时间:2024/06/04 23:20

1.伪码

第一部分,将两个子串合并的算法

第二部分,递归分化,然后子串合并

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;}




0 0
原创粉丝点击