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];

次に、次のコード ブロックをループに入れて、fora[] のすべての要素を反復処理できます。

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 に答える