0

对不起,我想不出一个好的标题。我有一个看似简单的家庭作业,但我根本无法完成。这个想法很简单:

您有一个未排序的数组“A”和一个空数组“B”。您必须通过执行以下操作使 B 成为 A 的排序版本:

  • 找到尚未插入 B 的 A 的最小值。
  • 将该值插入 B 的第一个空位置。
  • 重复直到B满。

当我第一次听到这个任务时,它看起来很简单,但我根本无法实现。它应该是伪代码,但我尝试了 Java。

public static void main(String[] args)
{
    int[] A = new int[]{3,4,2};
    int[] B = new int[A.length];

    int lastindex = -1;
    int lastchanged = 0;
    for (int j = 0; j < B.length; j++)
    {
        int small = A[0];
        lastchanged = 0;
        for (int i = 0; i < A.length; i++)
        {
            if (lastindex > -1)
            {
                if (A[i] <= small && i != lastindex && A[i] > A[lastindex])
                {
                    small = A[i];
                    lastchanged = i;
                }
            }
            else
            {
                small = A[i];
                lastchanged = i;                    
            }
        }
        B[j] = small;
        lastindex = lastchanged;
    }

我曾想过将 B 的空值表示为 0,但如果我的“A”为零,使用 -1 时会出现类似的问题。

4

2 回答 2

0

您用于空占位符的值B无关紧要。您从索引 0 开始插入B并替换其中的任何值,然后替换索引 1 等。那么为什么B最初的值很重要?里面可以是任何数字。

于 2013-10-01T03:57:40.630 回答
0

如果我正确理解问题...

b[0] = a[0];

然后可以将以下代码块放入for循环中以遍历 a[] 的每个元素:

if(a[1] < b[0]) {
    b[1] = b[0];
    b[0] = a[1];
} else {
    b[1] = a[1];
}

不仅如此。您需要将 a 与 b 中的每个元素进行比较,直到找到正确的位置...但是正如您所说,这是作业...所以我将其中一些留给您。

于 2013-10-01T03:58:36.310 回答