java - 选择排序(Java)

标签 java arrays algorithm

 public class Array {
    public static void sort(int[] list) {
    int min;
    int temp;

    for(int i = 0; i < list.length - 1; i++) {
        min = i;
        for(int j = i + 1; j < list.length; j++) {
            if(list[j] < list[min]){
                min = j;
            }
        }
        temp = list[min]; 
        list[min] = list[i]; 
        list[i] = temp;

    }

}
public static void main(String[] args) {
    int a[] = {2,1,3};
    sort(a);
    for(int i = 0; i < a.length; i++) {
        System.out.println(a[i]);

     }
  }
} 

我理解这个程序中的所有内容,直到我明白:

        temp = list[min]; 
        list[min] = list[i];
        list[i] = temp;

有人可以简单地解释一下吗?换句话说,上面的目的是什么?

最佳答案

让我们分解一下:

for(int i = 0; i < list.length - 1; i++) {
   min = i;
   for(int j = i + 1; j < list.length; j++) {
      if(list[j] < list[min]){
          min = j;
      }
   }
   temp = list[min]; 
   list[min] = list[i]; 
   list[i] = temp;

}

使用变量 i 的第一个循环获取第一个位置的元素。内部循环,使用变量 j获取第二个元素。

在if条件下if(list[j] < list[min])您正在比较第一个元素和第二个元素。如果第二个元素小于第一个元素,则代码中 min = j您获取第二个元素并将其指定为最小值。

当您退出第二个循环时,您的最小值就是列表中具有最低值的元素的位置。然后你在代码中

temp = list[min]; 
list[min] = list[i]; 
list[i] = temp;

将列表中的第一个元素替换为现有的最低元素。 现在列表中的第一个元素是列表中的最小值。完成后,您再次进入第一个循环,这一次,您的 i 而不是第一个元素。是第二个元素,你的 j是你的第三个元素。

这将继续,直到循环完列表中的所有元素为止。

关于java - 选择排序(Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34501347/

相关文章:

Java - 使用 IO - 说明

javascript - 扩展数组的问题

javascript - 嵌套 for in 循环,不工作 JavaScript

javascript - 如何在数组中使用类似于 AngularJS 的 SQL 中的 'Like"子句的过滤器

algorithm - 路径压缩对于不相交集的森林来说已经足够了,为什么我们需要按等级合并

algorithm - 如何进行n维空间划分?

java - 字符串方法和循环

java - 创建 DHCP 客户端列表 java

java - 调整窗口大小时绘制的图形闪烁然后消失

python - 在 Python 中确定嵌套元组的嵌套级别的简单方法