排序——选择排序

一、基本介绍

​ 冒泡排序是从带排序的数据中,按照某一排序规则(从大到小或者从小到大)选出某一元素,在依规定交换位置达到排序的目的。

二、排序过程

对数组[100 , 20 , 80 , 8 ] 从小到大排序过程如下:

1. 第一趟排序
   - 从数组 [100 , 20 , 80 , 8 ] 第一个位置起找到最小值 8,将其放到第一个位置,得到数组 [8 , 20 , 80 , 100 ] 
2. 第二趟排序
   - 从数组 [8 , 20 , 80 , 100 ]  第二个位置起找到最小值 20,将其放到第二个位置,得到排序后的数组 [8 , 20 , 80 , 100 ] 
3. 第三趟排序
   - 从数组 [8 , 20 , 80 , 100 ]  第三个位置起找到最小值 80,将其放到第三个位置,得到排序后的数组 [8 , 20 , 80 , 100 ] 

这个时候数组变排好序了。可以看出,当数组中的元素个数为 m 时,需要进行 m-1 趟排序。在每一次排序时就是找出该位置的最小值然后放到该位置。

三、代码实现

public static void selectSort(int[] arr) {
        if (arr == null || arr.length < 2) {//数组为空或者长度为1直接返回
            return;
        }
        int min = 0;
        int minIndex = 0;
        for (int i = 0; i < arr.length - 1; i++) {//当遍历次数为数组长度-1时,数组排序完成
            min = arr[i];//假设当前第一个值为最小值,临时变量存储最小值
            minIndex = i;//临时变量存储最小值的索引
            for (int j = i + 1; j < arr.length; j++) {//遍历从i+1个元素开始
                if (min > arr[j]) {//当前min保存的不是最小值
                    min = arr[j];
                    minIndex = j;
                }
            }
            if (minIndex != i) { //当前保存的值是最小值,不需要在进行赋值
                arr[minIndex] = arr[i];
                arr[i] = min;
            }
        }
    }
原文地址:https://www.cnblogs.com/Mhang/p/12316380.html