【问题标题】:Merge sort is not working [closed]合并排序不起作用[关闭]
【发布时间】:2016-09-29 07:02:00
【问题描述】:

我正在处理合并排序,我知道当列表之一出现时我遇到了问题 比较时为空..然后它将在此之后打印空值.. 帮我处理条件..我无法正确使用条件语句。 提前谢谢..:)

#include<stdio.h>
#include<stdlib.h>

void merge(int *a, int n, int *b, int m)
{
    int i=0, j=0, c[100], k=0;

    //make traitment :
    //================
    while(i!=n && j!=m) {
      if(i!=n)
         c[k++] = a[i]>b[j] ? b[j++] : a[i++];
      else
        c[k++] = a[j];

      if(j!=m)
        c[k++] = a[i]>b[j] ? b[j++] : a[i++];
      else 
        c[k++] = a[i];
    }

    //view the result :
    //================
        for(i = 0;i < (n+m);i++) { 
          printf("%d\n", c[i]); 
        }
   }
void main() {
    int size,size2;
    scanf("%d", &size);
    scanf("%d", &size2);
    int ar[size], br[size2],i;
    for(i = 0; i < size; i++)
      { 
        scanf("%d", &ar[i]); 
      }
    for(i = 0; i < size2; i++)
      { 
        scanf("%d", &br[i]); 
      }
    merge(ar, size, br, size2);

  }

【问题讨论】:

  • 欢迎来到 Stack Overflow!听起来您可能需要学习如何使用调试器来逐步执行代码。使用好的调试器,您可以逐行执行您的程序,并查看它与您期望的偏差在哪里。如果您要进行任何编程,这是必不可少的工具。进一步阅读:How to debug small programs.
  • 您正在将 merge 函数中的数据(这是不必要的复杂)排序到本地数组 c[]。一旦该函数返回,它与 anything 没有任何关系。传入的两个数组保持不变,最终未排序。

标签: c sorting data-structures mergesort


【解决方案1】:

k 不应该大于 (m+n) - 1,所以改变 while 条件如下:

  while(k <= (m+n-1))

【讨论】:

    猜你喜欢
    • 2016-12-10
    • 2016-08-19
    • 1970-01-01
    • 2018-12-04
    • 2015-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多