【问题标题】:K-th element of two sorted Arrays两个排序数组的第 K 个元素
【发布时间】:2019-05-14 22:59:06
【问题描述】:

给定两个大小分别为 M 和 N 的排序数组 A 和 B 以及一个元素 k。任务是找到最终排序数组的第 k 个位置的元素。

问题来自 GeeksforGeeks

这是我为上述问题编写的代码。我刚刚将给定的两个数组连接到第三个数组中,然后对其进行排序。我用C语言写过。我缺乏关于如何以优化方式编写代码的知识。请帮助我,让我知道如何优化代码,从而减少执行时间。

 for (i = 0; i <= n1 - 1; i++)
{
  scanf ("%d", &a[i]);
}
  for (i = 0; i <= n2 - 1; i++)
{
  scanf ("%d", &b[i]);
}
  for (i = 0; i < n1; i++)
{
  c[i] = a[i];
}
  for (j = n1, i = 0; j <= z - 1 && i <= n2 - 1; j++, i++)
{
  c[j] = b[i];
}
  for (i = 0; i <= z - 1; i++)
{
  for (j = i + 1; j <= z - 1; j++)
    {
      if (c[i] > c[j])
    {
      temp = c[j];
      c[j] = c[i];
      c[i] = temp;
    }
    }
}
  printf ("%d", c[q]);

我得到了输出,但我面临的问题是.. 您的程序花费了比预期更多的时间。超过了时间限制 预期时间限制

【问题讨论】:

    标签: arrays sorting optimization


    【解决方案1】:

    MergeSort 的一些伪代码,一种有效合并两个排序数组的算法,这是最坏情况下的最优算法:

    function void mergesort(S array; l,r integer) {
        if (l<r) then
        #Sort each
            ~50% of array
            m := (r-l)
            div 2;
            mergesort(S, l, l+m);
            mergesort(S, l+m+1, r);
            #merges two sorted lists
            merge( S, l, l+m ,r);
        else
            # Nothing to do, 1-element list
        end if;
    }
    
    
    function void merge(S array; l,m,r integer) {
        B: array[1..r-l+1];
        i := l;
        # Start of 1st list
        j := m+1;
        # Start of 2nd list
        k := 1;
        # Target list
        while (i<=m) and (j<=r) do
            if S[i]<=S[j] then
                B[k] := S[i]; # From 1st list
                i := i+1;
            else
                B[k] := S[j]; # From 2nd list
                j := j+1;
            end if;
            k := k+1;
        # Next target
        end while;
        if i>m then
        # What remained?
            copy S[j..r] to B[k..k+r-j];
        else
            copy S[i..m] to B[k..k+m-i];
        end if;
        # Back to original list
        copy B[1..r-l+1] to S[l..r];
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-03-04
      • 1970-01-01
      • 1970-01-01
      • 2014-06-07
      • 1970-01-01
      相关资源
      最近更新 更多