aldol_reaction 2020-11-02 19:55 采纳率: 0%
浏览 27

各位大侠,请问为什么调试和输出结果不一样?

我在devC++5.11调试的时候添加了:*(&a[0])@10,*(&a[0])@10来查看数组的元素,但是调试的时候最后输出是0 0 0 0 0 0 0

而正常运行是很正常的归并排序结果:0 1 2 3 4 5 6

我把这两个查看去除,调试输出和正常运行一样

求救!!

#include <cstdio>
#include <cstring>
#include <string>
int t[100005];
int a[100005];
int n;
void mergeSort(int l, int r) {      //* 把[l,r]排序
	if(l == r) return;
	int mid = (l+r)/2;
	mergeSort(l, mid);              // 排序 a[l, mid]
	mergeSort(mid+1, r);            // 排序 a[mid+1, r]
	int p=l, q=mid+1, i=l;          // 合并到 t[l,r]
	while(p<=mid && q<=r) {         // 两个队伍都可以取
		if(a[p] < a[q])
			t[i++] = a[p++];
		else
			t[i++] = a[q++];
	}
	while(p <= mid) t[i++] = a[p++];// 左边队伍没有取完
	while(q <= r) t[i++] = a[q++];  // 右边队伍没有取完
	for(int i=l; i<=r; i++) a[i] = t[i];
}

void inp() {
	scanf("%d", &n);
	for(int i=1; i<=n; i++) scanf("%d", &a[i]);
}

int main(void) {
	inp();
	mergeSort(1, n);
	for(int i=1; i<=n; i++) printf("%d ",a[i]);
	puts("");
	return 0;
}

 

  • 写回答

1条回答 默认 最新

  • 码农阿豪@新空间代码工作室 Java领域优质创作者 2024-07-24 22:23
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
    根据您提供的代码,可以看出您实现的是归并排序算法。根据您描述的问题,调试时添加了`*(&a[0])@10,*(&a[0])@10`来查看数组元素时出现了问题,导致输出不符合预期。但是当去除这两个查看后,程序运行正常,输出正确的排序结果。这可能是由于调试工具对指针操作时出现了问题,导致程序的运行逻辑被影响。 为了解决这个问题,建议尽量避免在调试工具中直接操作指针来查看数组元素,可以通过打印数组元素的方法来进行调试。 您可以尝试修改代码,将调试操作去除,并通过在合适的位置打印数组元素来查看具体的排序结果。 以下是修改后的代码示例:
    #include <cstdio>
    #include <cstring>
    #include <string>
    int t[100005];
    int a[100005];
    int n;
    void mergeSort(int l, int r) {
        if(l == r) return;
        int mid = (l+r)/2;
        mergeSort(l, mid);
        mergeSort(mid+1, r);
        int p=l, q=mid+1, i=l;
        
        while(p<=mid && q<=r) {
            if(a[p] < a[q])
                t[i++] = a[p++];
            else
                t[i++] = a[q++];
        }
        
        while(p <= mid) t[i++] = a[p++];
        while(q <= r) t[i++] = a[q++];
        
        for(int i=l; i<=r; i++) a[i] = t[i];
    }
    void inp() {
        scanf("%d", &n);
        for(int i=1; i<=n; i++) scanf("%d", &a[i]);
    }
    int main(void) {
        inp();
        mergeSort(1, n);
        for(int i=1; i<=n; i++) printf("%d ",a[i]);
        puts("");
        
        return 0;
    }
    

    通过这种方法,您可以确认程序逻辑的正确性,同时避免出现调试工具操作指针时可能带来的问题。希望对您有帮助。如果您还有其他疑问,请随时提出。

    评论

报告相同问题?

悬赏问题

  • ¥15 有两个非常“自以为是”烦人的问题急期待大家解决!
  • ¥30 STM32 INMP441无法读取数据
  • ¥15 R语言绘制密度图,一个密度曲线内fill不同颜色如何实现
  • ¥100 求汇川机器人IRCB300控制器和示教器同版本升级固件文件升级包
  • ¥15 用visualstudio2022创建vue项目后无法启动
  • ¥15 x趋于0时tanx-sinx极限可以拆开算吗
  • ¥15 pyqt信号槽连接写法
  • ¥500 把面具戴到人脸上,请大家贡献智慧,别用大模型回答,大模型的答案没啥用
  • ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。
  • ¥15 各位 帮我看看如何写代码,打出来的图形要和如下图呈现的一样,急