如何在保留元素顺序的同时将列表的最小值移动到第一个元素

How to moves the minimum value of the list to be the first element while preserving the order of the elements

如果我有 [5,9,4,2,8,12] 的 ArrayList,我怎样才能得到 [2,5,9,4,8​​,12] 的输出。我可以找到最小值,但无法获得上述输出。

public static ArrayList<Integer> minToFront(ArrayList<Integer> list) {
    int min = Integer.MAX_VALUE;
    int first = list.get(0);
    for (int i = list.size() - 1; i >= 0; i--) {

        if (list.get(i) < min) {

            min = list.get(i);
        }

        list.set(0, min);

    }

    return list;

}

您似乎想要对 ArrayList 进行排序。虽然有更有效的方法可以做到这一点,但让我们从修复您的方法开始,minToFront().

使用类似的方法,我们可以将 minminInd(最小索引)的“默认”值存储为列表中的第一个值:

int min = list.get(0);
int minInd = 0;

接下来,我们可以遍历列表并找到最小元素。我们通过找到小于 min 的元素来做到这一点,如果我们找到一个更小的元素,那么我们重新定义 minminInd 的值:

for (int i = 0; i < list.size(); i++) {

    if (list.get(i) < min) {
        minInd = i;
        min = list.get(i);
    }

}

现在我们知道列表的最小元素是什么,我们需要将该值与我们的第一个元素交换。我们通过创建一个临时变量来存储我们的第一个元素,然后交换:

int temp = list.set(0, min);
list.set(minInd,temp);

return list;

在我们的 main 方法中,我们可以通过首先定义另一个将存储我们排序后的列表的列表来对整个列表进行排序。

虽然我们的旧列表仍然有元素,但我们可以找到旧列表中的最小元素,将其移动到我们的新列表,从我们的旧列表中删除它,然后重复这个过程直到我们移动完所有元素到我们的新列表:

while(origList.size() > 0){
  origList = minToFront(origList);
  sortedList.add(origList.get(0));
  origList.remove(0);
}

应用所有这些更改后,我们的代码应如下所示:

import java.util.*;
class Main {
  public static void main(String[] args) {
    ArrayList<Integer> sortedList = new ArrayList<Integer>();
    ArrayList<Integer> origList = new ArrayList<Integer>();
    origList.add(5);
    origList.add(9);
    origList.add(4);
    origList.add(2);
    origList.add(8);
    origList.add(12);
    while(origList.size() > 0){
      origList = minToFront(origList);
      sortedList.add(origList.get(0));
      origList.remove(0);
    }
    System.out.println(sortedList);
  }
  public static ArrayList<Integer> minToFront(ArrayList<Integer> list) {
    int min = list.get(0);
    int minInd = 0;
    for (int i = 0; i < list.size(); i++) {

        if (list.get(i) < min) {
            minInd = i;
            min = list.get(i);
        }

    }
    int temp = list.get(0);
    list.set(0, min);
    list.set(minInd,temp);

    return list;
  }
}

输出:

[2, 4, 5, 8, 9, 12]

希望这能回答您的问题!如果您需要任何进一步的说明或详细信息,请告诉我:)

public class Main {    
public static void main(String[] args) {        
    int [] arr = new int [] {5,9,4,2,8,12};
    int[] arr2 = new int[arr.length];
    int index = 0;
    
    for(int i=1;i<arr.length;i++)
    {
        if(arr[i]<arr[i-1])
        {
            index=i;
        }
    }
    
    arr2[0]=arr[index];
    int counter=1;
    for(int i=0;i<arr.length;i++)
    {
        if(index!=i)
        {
            arr2[counter++]=arr[i];
        }
    }
      
    System.out.println();    
    for (int i = 0; i < arr2.length; i++) {     
        System.out.print(arr2[i] + " ");    
    }    
}    

}

    int minIndex = -1;
    int tmp = array[0];
    int min = 0;
    for (int i = 0; i < array.length; i++) {
        if (array[i] < min) {
            minIndex = i;
            min = array[i];
        }
    }
    array[0] = min;
    array[minIndex] = tmp;
    return array;
}```