选择排序

(1)算法的介绍

选择排序(Selection-sort)是一种简单直观的排序算法。它的工作原理:首先在给出的arr数组中找到最小(大)元素,存放到arr数组的起始位置,然后再从arr未排序的元素中继续寻找最小(大)元素,然后放到arr第二个位置。以此类推,直到所有元素均排序完毕。

(2)算法的原理

1、在 [L ... N-1] 范围内找出最小项目 X 的位置,

2、用第 L 项与X项交换,

3、在 [L+1 ... N-1] 范围重复步骤1和步骤2,直到 L = N-2

(3)动态图演示

(4)实现

    public static void selectionSort(int[] arr) {
        // 1.参数判断
        if (arr == null || arr.length < 2) return;

        // 0 ~ N - 1 找到最小值,与 0 位置上数交换
        // 1 ~ N - 1 找到最小值,与 1 位置上数交换
        for (int i = 0; i < arr.length - 1; i++) {
            int minIndex = i;
            for (int j = i + 1; j < arr.length; j++) { // i ~ N-1上找到最小值的下标
                minIndex = arr[minIndex] < arr[j] ? minIndex : j;
            }
            swap(arr, i, minIndex);
        }
    }

    public static void swap(int[] arr, int i, int j) {
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;  
    }

(5)算法评估

  • 时间复杂度:$O(N^2)$
  • 空间复杂度:$O(1)$

代码地址:https://github.com/cosmos-lin/Algorithm2021/blob/master/src/sort_algorithm/SelectionSort.java

posted @ 2021-11-30 19:36  cosmos-lin  阅读(73)  评论(0)    收藏  举报