0

だから私がやろうとしているのは、配列全体を調べて配列をソートし、毎回値を配列内の最小値と交換することです。minValue を見つけるメソッドを作成しましたが、その値を現在の値と交換する方法がわかりません。これはおそらくひどい説明ですが、コードは次のとおりです。

public static int findMin(int[] numList, int start, int end){

    int minIndex = numList[0];
    for (int i = start; i < end; i++) {
        if(numList[i] < minIndex){
            minIndex = numList[i];
        }
    }

    return minIndex;
}

そして、配列をソートするはずの私のループ:

for (int i = 0; i < numList.length; i++) {
        int minIndex = findMin(numList,i,10);
        numList[i] = minIndex;
    }

numList[i]ご覧のとおり、これは minValue にのみ置き換えられます。では、numList[i] に既にある値を、配列 minValue が見つかった場所とどのように交換できますか?

ありがとう!

4

3 に答える 3

2

スワップするには、値を一時的な整数にコピーする必要があります。

int temp = numList[i];
numList[i] = numList[minIndex];
numList[minIndex] = temp;
于 2013-10-17T10:24:16.967 に答える
1

一時整数を使用する必要があります

int temp = numList[i];
numList[i] = numList[minIndex];
numList[minIndex] = temp;

あなたの findMin() で私は思う

int minIndex = numList[0];

する必要があります

int minIndex = numList[start];

最初のスワップの後、numlist[0] が最小値になるためです。配列の残りの部分で最小値を検索して、反復ごとに連続して大きな値を取得する必要があります。

于 2013-10-17T10:30:45.360 に答える
1

修正方法は、

public static int findMin(int[] numList, int start, int end){

        int minVal= numList[start];
        int minIndex = start;
        for (int i=start; i <end; i++) {
            if(numList[i] <minVal){
               minIndex=i;
               minVal=numList[i];
            }
        }

        return minIndex;
    }

そして、修正されたループは

for (int i = 0; i < numList.length; i++) {
            minIndex = findMin(numList,i,numList.length);
            temp=numList[i];
            numList[i]=numList[minIndex];
            numList[minIndex]=temp;
        }
于 2013-10-17T12:42:44.840 に答える