记排序算法(2)- 选择排序

89 阅读1分钟

算法描述

它的工作原理:首先在未排序序列中找到最小(大)元素,与排序至index的元素进行交换,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后再与排序至index的元素进行交换。以此类推,直到所有元素均排序完毕。

动画展示

selection.gif

代码实现

public class SelectionSort {
    public static void main(String[] args) {
        int[] arr = CommonStant.arr;
        int length = arr.length;
        for(int i = length - 1; i>0; i--){
            int max = Integer.MIN_VALUE;
            int index = 0;
            for (int j = 0; j <= i; j++) {
                if (arr[j] > max){
                    max = arr[j];
                    index = j;
                }
            }
            //swap
            int temp = arr[i];
            arr[i] = max;
            arr[index] = temp;
        }
        Arrays.stream(arr).forEach(System.out::println);
    }
}

总结

稳定性:算法不稳定,冒泡排序在排序前后两个相等的数相对位置发生改变。
时间复杂度:O(n^2),最好和最坏都是O(n^2)
空间复杂度:O(1),不需要额外的变量进行存储。