选择排序

原理

从未排序的序列中选择最小元素,然后和起始位置元素交换(这样形成了局部有序序列),然后再从剩下未排列的序列中选择最小元素,和起始位置之后的一个元素交换,就这样一直到最后。

分析

第一趟:从第一个位置开始循环,找出序列的最小元素,然后和第一个位置交换
第二趟:从第二个位置开始循环,找出剩下序列的最小元素,然后和第二个位置交换
…………

代码实现

/**
     * 选择排序
     * @param arr
     */
    public static void selectionSort(int[] arr){
        for(int i=0;i<arr.length-1;i++){
            int minIndex = i;//默认最小值索引
            for(int j=i+1;j<arr.length;j++){
                if(arr[j]<arr[minIndex]){
                    minIndex = j;
                }
            }

            if(i!=minIndex){
                swap(arr,i,minIndex);
            }
        }
    }

算法复杂度和使用场景

嵌套循环:O(n*n)
比较次数:(n-1)+(n-2)+(n-3)+…+1 = n(n-1)/2
交换操作:介于0和n-1次.
和冒泡排序相比,交换操作少。

点赞