1.2、排序-选择排序(Select Sort)

算法简介

选择排序:是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。

选择排序是不稳定的排序方法。比如序列【6,6,2】,第一次就将第一个【6】与【2】交换,导致第一个6挪动到第二个6后面,在排序的过程中改变了两个6的相对位置。

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

一、算法步骤

选择排序是每次循环找出最值,循环结束后将最值调整到对应位置,交换的次数少。

假定排序结果要求是递增序列。

1、每次循环找出最小值,循环结束后将最小值调整到开始排序的位置。

2、第1趟,从第0个元素开始,找寻序列中最小值,然后将最小值和第0个元素交换。排序结果,第0个元素就是队列中的最小值。

3、第2趟,从第1个元素开始,找寻序列中最小值,然后将最小值和第1个元素交换。排序结果,第1个元素就是剩余队列中的最小值。

...

一共需要进行n-1趟排序。

二、代码实现(Java)

public class SelectionSort {
    
    public static void  main(String[] args){
        int[] array = {3, 7, 1, 2, 1, 2, 9, 5, 8};
        selectionSort(array);
        print(array);
    }
    
    private static void selectionSort(int[] array){
        if(array==null || array.length<2) return;
        int length = array.length;
        for(int i=0; i<length-1; i++){
            //设定当前起始位置为最小值
            int min = i;
            for(int j=i+1; j<length; j++){
                if(array[j]<array[min]){
                    //改变最小值位置
                    min = j;
                }
            }
            //最小值位置和当前起始位置不一致,则需要交换
            if(min!=i){ 
                int temp = array[i];
                array[i] = array[min];
                array[min] = temp;
            }
        }
    }

    private static void print(int[] array){
        for (int x : array){
            System.out.print(x+" ");
        }
        System.out.println();
    }
}

上一篇 1.1、排序-冒泡排序(Bubble Sort)

下一篇 1.3、排序-插入排序(Insert Sort)​​​​​​​

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值