1 /*
2 * 选择排序:
3 * 选择排序比冒泡排序的效率高。
4 * 高在交换位置的次数上。
5 * 选择排序的交换位置是有意义的。
6 * 循环一次,然后找出参加比较的这堆数据中最小的,拿着这个最小的值和最前面的数据“交换位置”。
7 * 参与比较的数据:3 1 6 2 5(这一堆参加比较的数据中最左边的元素下标是0)
8 * 第一次循环后的结果是:1 3 6 2 5
9 * 参与比较的数据:3 6 2 5(这一堆参加比较的数据中最左边的元素下标是1,下标是0的那个元素是1)
10 * 第二次循环后的结果是:2 6 3 5
11 * 参与比较的数据:6 3 5(这一堆参加比较的数据中最左边的元素下标是2)
12 * 第三次循环后的结果是3 6 5
13 * 参与比较的数据:6 5(这一堆参加比较的数据中最左边的元素下标是3)
14 * 第四次循环后的结果是:5 6
15 * 完成! 5条数据,循环四次
16 */
17 public class Test03 {
18 public static void main(String[] args) {
19 // 定义排序数组
20 int[] arr = { 3, 1, 6, 2, 5 };
21 for (int i = 0; i < arr.length - 1; i++) {
22 // 假设下标是0的数的值是最小的,也就是说第一个数就是最小的
23 int min = i;
24 // for循环进行判断,判断猜测是否正确
25 for (int j = i + 1; j < arr.length; j++) {
26 // 第二个数跟第一个数比较,如果第二个数更小,那第二个数的下标就是0,以此类推。
27 if (arr[j] < arr[min]) {
28 min = j;
29 }
30 }
31 // min是最小数的下标,如果第一个数不是最小的,就进行交换
32 if (min != i) {
33 int temp;
34 temp = arr[min];
35 arr[min] = arr[i];
36 arr[i] = temp;
37 }
38 }
39 for (int i = 0; i < arr.length; i++) {
40 System.out.println(arr[i]);
41 }
42 }
43
44 }