记录一个错误

在做清华OJ上的一道题时, 写了一个归并排序,代码如下:

 1 void MergeSort(int x[], int y[], int lo, int hi)
 2 {
 3     /*
 4     *归并排序函数,以 x[] 为标准排序
 5     */
 6
 7     if(lo < hi)
 8     {
 9         int mi = (lo + hi) >> 1 ;
10
11         MergeSort(x, y, lo, mi) ;
12         MergeSort(x, y, mi+1, hi);
13         Merge(x, y, lo, mi, hi);
14     }
15 }
16
17
18 void Merge(int x[], int y[], int lo, int mi, int hi)
19 {
20     /*
21     *归并操作,隶属于MergeSort函数
22     */
23
24     int length_1 = mi - lo + 1, length_2 = hi - (mi + 1) + 1;
25
26     int A[length_1], B[length_2], C[length_1], D[length_2];
27
28     int i = 0, j = 0;
29     for (i = 0; i < length_1; ++i)    { C[i] = x[lo+i];    A[i] = y[lo+i];   }
30     for (j = 0; j < length_2; ++j)    { D[j] = x[mi+1+j];  B[j] = y[mi+1+j]; }
31
32     i=0, j=0; int t=lo;
33     while ((i < length_1) && (j < length_2))
34     {
35         if (C[i]<D[j])    {y[t++] = A[i++]; x[t-1] = C[i-1];}
36         else            {y[t++] = B[j++]; x[t-1] = D[j-1];}
37     }
38
39     while (i<length_1)    {y[t++] = A[i++]; x[t-1] = C[i-1];}
40     while (j<length_2)    {y[t++] = B[j++]; x[t-1] = D[j-1];}
41 }

这段代码过了OJ上的上一道题,但是用在现在这道题目中却发现了问题。使用这段代码进行一次排序操作后,如果再进行排序,结果就会不对。

如:a[],b[],c[],d[] 是四个符合题意的数组,有以下代码:

MergeSort(a, b, 0, n);
MergeSort(c, d, 0, n);

用sublime + gcc 编译:

a,b排序正确,c,d却会发生错误。

用vs2013编译:

a, b, c, d均排序错误。

时间: 2024-12-17 22:07:37

记录一个错误的相关文章

【记录一个问题】go get -u github.com/go-redis/redis出现错误&quot; invalid character &#39;.&#39; after top-level value&quot;

安装某个库的时候依赖于redis库,总是出现这样的错误: go install go: github.com/go-redis/redis/[email protected]: parsing go.mod: missing module line 猜测是redis库装错了,于是删除 C:\Users\ahfuzhang\go\src\github.com\go-redis,然后删除:C:\Users\ahfuzhang\go\pkg\mod\cache目录下所有文件. 尝试单独安装redis库

转:《链接、装载与库》里的一个错误:关于调用栈

<链接.装载与库>里的一个错误:关于调用栈 按照原文中描述做了一个PPT: 每次执行push指令时,esp都会减4(因为栈是向低地址增长的),每次pop时esp都会加4. 指令:push a 指令:push b 指令: 1.把main方法当前指令的下一条指定地址(即return address))push到栈中. 2.使用call指令调用目标函数体. 指令:将ebp的当前值push到栈中,即saved ebp. 指令:将esp的值赋给ebp,则意味着进入了foo方法的调用栈. 指令:push

Android记录一个setTextColor常见的一个bug

今天写代码 一不小心就犯了个错误.仔细检查才发现,仅记录一下,防止各位同学犯同样的错误哦 代码如下: remote.setTextColor(summaryId, R.color.news_have_read); 如上,代码无论如何都不能正常显示颜色.只好换成如下代码: remote.setTextColor(summaryId,0xfdfdfdfd); 总不能写颜色值多麻烦..还是写的color.xml中吧. 最后才发现应该这样写才最对. remote.setTextColor(summary

JMeter一个错误the target server failed to respond--JMeter坑

问题:1.在测试一个http景象,特别是集波动TPS时刻,出现了一个错误.它现在是一个必须错误(压力顺利时却零星的错误,甚至很少见): 每次必现错误(開始一直怀疑是网络或程序的问题)   2.失败事务报错信息例如以下,我遇到的是以下的那种 Socket closed Non HTTP response code: org.apache.http.NoHttpResponseException (the target server failed to respond) 资料查询:https://w

验证码的存在是一个错误——论非人为操作的可识别性

很早以前我就思考一个问题:验证码在理论上是否有存在的必要性呢? 从验证码第一次被应用于网络中,早期的验证码是一串非常简单的形状标准的数字,经过长期的发展,形式越来越多样化,人们似乎已经习惯了,没有人去质疑它有什么问题,更没有人去思考它是否有存在的必要.复杂的验证码虽然起到了防范非人为操作的作用,但是带来的时间及效率上的损失更是巨大的.的确,它不是一个错误,但是我们从效率上来考量,它就是一个累赘.我们有必要让人们从繁琐的辨认.输入.输错重输的严重耗费时间的劳动中解放出来. 人为操作与机器操作(非人

记录一个读pcap数据包的软件:Fiddler

Fiddler.大神推荐的.名字老忘. 用wireshark在wifi共享精灵共享出来的无线网上抓包,发现一个SSDP(简单服务发现协议)一直在尝试找连上这个网络上的设备. 连上NEXUS4后出现了ICMPv6( Internet Control Message Protocol,错误侦测,维护路由)以及DHCP.TCP的一些信息. 记录一个读pcap数据包的软件:Fiddler

MapGuide GIS系统求助,用FDO连接SDF文件报一个错误,几天都没找到解决办法

到目前网上有关GIS系统资料很少,而WebGIS这块,不各道大家都用什么,我这里用的是MapGuide 做GIS的显现,后台用的MapWindow 做图层,及管道网的搭建,这是将用页面显示的地理管道信息, 现在碰到一个问题:  用FDO连接SDF文件报一个错误,求助一些GIS高手们, 整理效果是这样的,在这里也将会在博客上发一些有关GIS系统项目中相关技术点,及问题点文章,给大家 1.1.1. FDO的数据结构 Feature(要素): 要素是对现实世界物体的抽象.一个要素直接或间接的关联地理位

Spring中的一个错误:使用Resources时报错(The annotation @Resources is disallowed for this location)

在学习Spring的过程中遇到一个错误:在使用注解@resources的时候提示:The annotation @Resources is disallowed for this location 后来来在学问Java网友的时候解决了. 原来的代码是这样的: 1 package com.show.biz; 2 3 import javax.annotation.Resources; 4 5 import com.show.biz.UserBiz; 6 import com.show.dao.Us

VS2013 C# 调用 cognex 的QuickBuild做程序时发生一个错误

今天在用 VS2013 C# 调用 cognex 的QuickBuild做程序时发生一个错误,如下所示 混合模式程序集是针对"v2.0.50727"版的运行时生成的,在没有配置其他信息的情况下,无法在 4.0 运行时中加载该程序集 网上搜索得到解决办法: 在app.config中添加一个配置节:startup <startup useLegacyV2RuntimeActivationPolicy="true"> <supportedRuntime