一个归并排序卡了一天最后还是归并算法有问题,最初是为了把算法导论的伪代码转到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. 线程局部存储 TLS

    C/C++运行库提供了TLS(线程局部存储),在多线程还未产生时,可以将数据与正在执行的线程关联.strtok()函数就是一个很好的例子.与它一起的还有strtok_s(),_tcstok_s()等等 ...

  2. centOS 7 部署samba

    部署samba **每个用户有自己的目录,可以浏览内容,也可以删除** 清空防火墙规则 [root@bogon ~]# iptables -F 安装samba [root@bogon ~]# yum ...

  3. Google Intern

    申请 事情应该从去年(2013)说起,好基友从百度离职跳到了Google,回学校打印本科成绩单,然后晚上在scuacm群里,结果Dr. zuo问我想去实习么,正好有学长可以内推. 于是乎写了简历,然后 ...

  4. Kuangbin 带你飞-基础计算几何专题 题解

    专题基本全都是模版应用.贴一下模版 平面最近点对 const double INF = 1e16; ; struct Point { int x,y; int type; }; double dist ...

  5. phpstudy2014没有mysqldumpslow.pl及其在性能优化的作用

    mysqldumpslow.pl的作用是监控mysql的性能瓶颈的 1)在phpstudy2014中没有这个mysqldumpslow.pl所以需要去下载一个然后放置于mysql/bin的文件夹中,由 ...

  6. 利用php设置url转发 - 解决空间不提供子目录绑定功能的问题

    由于很多新手都是使用的虚拟空间都是最便宜的那种,这空间一般不支持子目录绑定.但是很多朋友又想设置几个不同的二级域名访问不同的网站程序.于是大家找到了域名url转发,但是由于国家政策的原因,许多服务商暂 ...

  7. CSS中的HSLA颜色

    CSS 中的颜色可以由RGB色彩空间和HSL色彩空间两种方式来表述.其中我们常用的是RGB色彩空间,RGB色彩空间的颜色表示方式有:十六进制颜色(如红色:#FF0000).RGB颜色(如红色:rgb( ...

  8. Java 原子性引用 AtomicReference

    http://www.jianshu.com/p/882d0e2c3ea6 实现 原子操作 使用场景: 一个线程使用student对象,另一个线程负责定时读表,更新这个对象.那么就可以用AtomicR ...

  9. LISTVIEW 消息 结构 宏

    如果是要画的话,用CreateWindowEx创建 指定 WC_LISTVIEW window class 关于其消息如下: LVM_APPROXIMATEVIEWRECT  LVM_ARRANGE  ...

  10. linux上redis的安装与配置

    1.redis安装 wget http://download.redis.io/releases/redis-4.0.8.tar.gz tar xzf redis-4.0.8.tar.gz ln -s ...