Java基础算法--选择排序

1、算法介绍

  1. 从原始的数组中选出最小的一个数据(如果当前位置为最小值则不进行交换),将其与数组第一个位置的数据进行交换。
  2. 完成一次交换之后,第一个位置的数据便是最小值。
  3. 固定了第一个位置之后,从剩下的 n - 1 个数据中选出其中最小的数据将其与第二个位置进行交换。
  4. 完成二次交换之后,第二个位置的数据便是次小值。
  5. 固定了第二个位置之后,从剩下的 n - 2 个数据中选出其中最小的数据将其与第三个位置进行交换。
  6. 重复执行以上过程,直到最后的两个数据交换完成(需要循环数组长度 - 1 次

2、举例演示(循环 n - 1 次)---- n 为数组长度

原数组: [117, 101, 106, 155, 112]

第一次排序后:[101, 117, 106, 155, 112] 交换101 和 117

第二次排序后:[101, 106, 117, 155, 112] 交换106 和 117

第三次排序后:[101, 106, 112, 155, 117] 交换112 和 117

第四次排序后:[101, 106, 112, 117, 155] 交换117 和 155

3、图解

选择图解

4、代码实现

package sort;

import java.util.Arrays;

/**
 * <p>
 *
 * </p>
 *
 * @author: D
 * @since: 2020/9/8
 * @version: 1
 */
public class SelectionSortDemo {
    public static void main(String[] args) {
        int[] arr = {117, 101, 106, 155, 112};
        selectionSort(arr);
        System.out.println(Arrays.toString(arr));
    }

    private static void selectionSort(int[] arr) {

        // 标记当前交换的位置
        int index;

        // 临时变量
        int temp;

        for (int i = 0; i < arr.length - 1; i++) {
            index = i;
            System.out.println("第" + (i + 1) + "次交换前: " + Arrays.toString(arr));
            for (int j = i + 1; j < arr.length; j++) {
                if (arr[j] < arr[index]) {
                    index = j;
                    System.out.println("下标[" + j +"," + arr.length + "] 中" + "最小的数 = " + arr[j]);
                }
            }

            // 如果当前位置的数据不是最小的则进行交换操作,否则不进行交换
            if (index != i) {
                temp = arr[i];
                arr[i] = arr[index];
                arr[index] = temp;
                System.out.println("第" + (i + 1) + "次交换后: " + Arrays.toString(arr));
            } else {
                System.out.println("未发生交换");
            }
            System.out.println();
        }
    }
}

5、运行结果

image-20200908195836058

猜你喜欢

转载自blog.csdn.net/d875708765/article/details/108477542