一个归并排序卡了一天最后还是归并算法有问题,最初是为了把算法导论的伪代码转到c++而加了一些东西,其中在对左右数组的赋值那里出了问题。因为进行测试时不完全,就是只用书上的数组进行测试时,归并算法部分还好使,而归并排序不好使,一度以为是函数递归出了问题。现在看来,首先要看懂递归模型,然后算法的基础要弄明白,输入的参数一定要弄好,不要总弄常量进行测试。

//MERGE(A,p,q,r)

// n1=q-p+1

// n2=r-q

// let L[1...n1+1] and R[1..n2+1] be new arrays

// for i=1 to n1

//  L[i]=A[p+i-1]

// for j=1 to n2

//  R[j]=A[q+j]

// L[n1+]=infinity

// R[n2+1]=infinity

// i=1

// j=1

// for k=p to r

//  if L[i]<=R[j]

//  A[k]=L[i]

//  i=i+1

//  else A[k]=R[j]

//  j=j+1

#include <iostream> using namespace std;
void Merge(int A[],int p,int q,int r) { int n1=q-p+; int n2=r-q; int *L=new(int[n1]); int *R=new(int[n2]); for (int i=;i<n1;i++) { L[i]=A[i+p-];//这两个地方不能瞎改,跟归并排序有关,乱改了就会出现归并无法进行的情况。 } L[n1]=; for (int j=;j<n2;j++) { R[j]=A[q+j];//这两个地方不能瞎改 }   R[n2]=;   int i=;   int j=;   int k; for (k=p-;k<r;k++) {   if (L[i]<=R[j]) {
   A[k]=L[i];    i++;
} else { A[k]=R[j]; j++; } } //delete L; //delete R;//一加这两条程序就死了 } void MergeSort(int A[],int p,int r)//归并排序 { if( p < r ) { int q=(p+r)/; MergeSort(A,p,q); MergeSort(A,q+,r); Merge(A,p,q,r); } } //MERGE-SORT(A,p,r) // if q<r // q=[(p+r/2)] // MERGE-SORT(A,p,q) // MERGE-SORT(A,q+1,r) // MERGE(A,p,q,r) int main() { int A[]={,,,,,,,,,,,,,,}; //int A[]={2,4,5,7,1,2,3,6}; int p,r,q; p=; //q=4; r=; cout<<"排序前:"; for (int i=;i<r;i++) cout<<A[i]<<' '; cout<<endl; MergeSort(A,p,r);//归并排序 cout<<"排序后:"; for (int i=;i<r;i++) cout<<A[i]<<' '; cout<<endl; system("pause"); return ; }

【算法导论C++代码】归并排序的更多相关文章

  1. 【算法导论C++代码】Strassen算法

    简单方阵矩乘法 SQUARE-MATRIX-MULTIPLY(A,B) n = A.rows let C be a new n*n natrix to n to n cij = to n cij=ci ...

  2. 基于visual Studio2013解决算法导论之002归并排序

     题目 归并排序 解决代码及点评 #include <stdio.h> #include <stdlib.h> #include <malloc.h> #in ...

  3. 【算法导论C++代码】最大子数组

    #define Inf 65535 #include <iostream> using namespace std; void FindMaxCrossingSubarray(int *A ...

  4. 《算法导论》第二章demo代码实现(Java版)

    <算法导论>第二章demo代码实现(Java版) 前言 表示晚上心里有些不宁静,所以就写一篇博客,来缓缓.囧 拜读<算法导论>这样的神作,当然要做一些练习啦.除了练习题与思考题 ...

  5. 算法导论 - 基础知识 - 算法基础(插入排序&归并排序)

    在<算法导论>一书中,插入排序作为一个例子是第一个出现在该书中的算法. 插入排序: 对于少量元素的排序,它是一个有效的算法. 插入排序的工作方式像许多人排序一手扑克牌.开始时,我们手中牌为 ...

  6. 《算法导论》读书笔记之排序算法—Merge Sort 归并排序算法

    自从打ACM以来也算是用归并排序了好久,现在就写一篇博客来介绍一下这个算法吧 :) 图片来自维基百科,显示了完整的归并排序过程.例如数组{38, 27, 43, 3, 9, 82, 10}. 在算法导 ...

  7. 《算法导论》归并排序----merge-sort

    伪代码请见<算法导论>2.3节 merge-sort实现: public class MergeSort {        public static void sort(double [ ...

  8. MIT算法导论——第五讲.Linear Time Sort

    本栏目(Algorithms)下MIT算法导论专题是个人对网易公开课MIT算法导论的学习心得与笔记.所有内容均来自MIT公开课Introduction to Algorithms中Charles E. ...

  9. MIT算法导论——第四讲.Quicksort

    本栏目(Algorithms)下MIT算法导论专题是个人对网易公开课MIT算法导论的学习心得与笔记.所有内容均来自MIT公开课Introduction to Algorithms中Charles E. ...

随机推荐

  1. Extjs3.4 合并单元格

    Ext3.4合并单元格   表格上添加grid-row-span样式

  2. Swift学习三

    http://blog.csdn.net/kuloveyouwei/article/details/36005299 Swift 提供两种集合类型来存储集合,数组和字典.数组是一个同类型的序列化列表集 ...

  3. python学习笔记 序列化

    在程序运行的过程中,所有的变量都是在内存中,比如,定义一个dict: d = dict(name='Bob', age=20, score=88) 可以随时修改变量,比如把name改成'Bill',但 ...

  4. Linux下的hrtimer高精度定时器【转】

    转自:http://blog.csdn.net/waverider2012/article/details/38305785 hrtimer高精度定时器的interval由ktime_set(cons ...

  5. mapper配置文件中的动态SQL

    <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "- ...

  6. 某dp题

    [NOI联考by ysy]庆典 2016年6月17日1,1040 [题目描述] 战狂在昌和帝国的首都法法城召开了庆典,向一万名最杰出的士兵分发了用魔法猪做的猪肉饺子,士兵们吃了猪肉饺子后,战斗力大幅提 ...

  7. docker从零开始网络(一)概述

    概述 预计阅读时间: 4分钟 Docker容器和服务如此强大的原因之一是您可以将它们连接在一起,或者将它们连接到非Docker工作负载.Docker容器和服务甚至不需要知道它们部署在Docker上,或 ...

  8. facets学习(1):什么是facets

    ML 数据集可以包含数亿个数据点,每个数据点由数百(甚至数千)的特征组成,几乎不可能以直观的方式了解整个数据集.为帮助理解.分析和调试 ML 数据集,谷歌开源了 Facets,一款可视化工具. Fac ...

  9. vim 代码片段:通过vundle插件管理器安装ultisnips |centos6.5|vim7.2

    背景:中午醒来,饭都没吃,突然想到要给vim增加个代码片段的功能,因为昨天使用了gedit的代码片段,感觉不错.为什么不直接使用gedit呢?因为我相信把时间投入到vim是不会错的,精通vim就好了. ...

  10. String.Format,DateTime日期时间格式化

    DateTime dt = DateTime.Now;//2010年10月4日 17点05分            string str = "";            //st ...