以最小值交换数组值

时间:2013-10-17 10:22:07

标签: java arrays swap

所以我要做的是通过遍历整个数组对数组进行排序,并且每次都使用数组中的最小值交换值。我已经创建了一个查找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中的任何位置交换?

谢谢!

3 个答案:

答案 0 :(得分:2)

您需要将值复制到临时整数以进行交换:

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

答案 1 :(得分:1)

你必须使用临时整数

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

在你的findMin()我认为

int minIndex = numList[0];

应该是

int minIndex = numList[start];

因为在第一次交换后,numlist [0]将是最小的值。应该在数组的其余部分中搜索最小值,以便我们在每次迭代中连续获得更大的值。

答案 2 :(得分:1)

Corrected方法是

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