过程简单描述:
首先,找到数组中最小的那个元素,其次,将它和数组的第一个元素交换位置(如果第一个元素就是最小元素那么它就和自己交换)。其次,在剩下的元素中找到最小的元素,将它与数组的第二个元素交换位置。如此往复,直到将整个数组排序。这种方法我们称之为选择排序

为方便理解我还准备了动图:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class SelectSort {
public static int[] selectSort(int[] a) {
int n = a.length;
for (int i = 0; i < n - 1; i++) {
int min = i;
for (int j = i + 1; j < n; j++) {
if(a[min] > a[j]) min = j;
}
//交换
int temp = a[i];
a[i] = a[min];
a[min] = temp;
}
return a;
}
}

咋们来测试一下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
package jj;

public class SelectionSort{
public static void main(String[] args) {
int[] arr = {2,5,5,7,1,3,9,8,6,10};
int min;
for(int i=0; i<arr.length-1; i++){
min = i;
for(int j=i+1; j<arr.length; j++){
if(arr[min]>arr[j]){
min=j;
}
}
//交换
if(min!=i){
int temp = arr[min];
arr[min] = arr[i];
arr[i] = temp;
}
}

for(int k=0; k<arr.length; k++){
System.out.print(arr[k]+" ");
}
}
}

输出结果:

1
1 2 3 5 5 6 7 8 9 10