Temet_nosce 2022-04-11 21:53 采纳率: 25%
浏览 16

c语言赋值语句出现问题。使用变量名right的值不对

问题遇到的现象和发生背景

编个递归排序调用函数的时候一步步调试,发现right的值不对

问题相关代码,请勿粘贴截图
#include <stdio.h>

int merge(int a[], int L, int mid, int R)
{
  int help[R - L + 1];
  int i = 0;
  int left = L;
  int right = mid + 1;//出现问题的地方!!!!!
  int test = 0;
  // for (; i < (R - L + 1) && left <= mid && right <= R; i++)
  // {
  //   if (a[left] < a[right])
  //   {
  //     help[i] = a[left];
  //     left++;
  //   }
  //   else
  //   {
  //     help[i] = a[right];
  //     right++;
  //   }
  // }
  // while (left <= mid)
  // {
  //   help[i++] = a[left++];
  // }
  // while (right <= R)
  // {
  //   help[i++] = a[right++];
  // }
  // for (int x = 0; x < (R - L + 1); x++)
  // {
  //   a[x] = help[x];
  // }
  return 0;
}

int process(int a[], int L, int R)
{
  if (L < R)
  {
    int mid = L + ((R - L) >> 1);
    process(a, L, mid);
    process(a, mid + 1, R);
    merge(a, L, mid, R);
    return 0;
  }
  else
    return 0;
}

int main()
{
  int n = 10;
  int i, j;
  int a[10] = {5, 44, 3, 54, 6, 76, 2, 3432, 5, 54};
  process(a, 0, 3);
  for (int x = 0; x < n; x++)
  {
    printf("  %d   ", a[x]);
  }
  printf("\n");
}

运行结果及报错内容

img

我的解答思路和尝试过的方法

只要用right就会出现问题为什么?

我想要达到的结果
  • 写回答

1条回答 默认 最新

  • superSmart_Dong 2022-07-24 15:57
    关注

    你的问题是为啥mid是0而right值是2吗?
    因为你这调试模式,监控变量窗口中的表达式是可以修改程序中的变量的。你的监视窗口中的“a[right++]”把right原来的值1变成了2。.
    另外你的排序,我也没看见有交换元素位置的操作呀

    评论

报告相同问题?

问题事件

  • 创建了问题 4月11日

悬赏问题

  • ¥15 层次聚类和蛋白质相似度
  • ¥25 主成分分析中的第一第二主成分分别代表哪些参数
  • ¥15 oracle数据库查询语句问题
  • ¥15 有没有c++绘制算法的佬们吗救孩一下
  • ¥15 android 蓝牙闪退
  • ¥15 绝缘子污秽comsol仿真参数
  • ¥15 labelme生成的json有乱码?
  • ¥30 arduino vector defined in discarded section `.text' of wiring.c.o (symbol from plugin)
  • ¥20 如何训练大模型在复杂因素组成的系统中求得最优解
  • ¥15 关于#r语言#的问题:在进行倾向性评分匹配时,使用“match it"包提示”错误于eval(family$initialize): y值必需满足0 <= y <= 1“请问在进行PSM时