选择排序(Java)

时间:2015-12-28 21:55:21

标签: 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;

有人可以用简单的方式解释这个吗?换句话说,上述目的是什么?

2 个答案:

答案 0 :(得分:2)

temp = list[min]; // saves the value of 'list[min]' to the 'temp' variable
list[min] = list[i]; // override the value of 'list[min]' with the value of 'list[i]'
list[i] = temp; // set the value of 'list[i]' to the value of 'list[min]', which is stored in the 'temp' variable

这用于切换list[min]&amp;的内容。 list[i],使用第3个temp orary变量。

答案 1 :(得分:2)

让我们分解一下:

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中取第二个元素并将其指定为最小值。

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

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

使用您拥有的最低元素替换列表中的第一个元素。 现在,列表中的第一个元素是列表的最低值。一旦你有了,你再次进入第一个循环,这一次,而不是第一个元素,你的i是第二个元素,你的j是你的第三个元素。

这一直持续到你循环遍历列表的所有元素。