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 回答