经典算法(2)-选择排序

选择排序是一种简单直观的排序算法,通过每一轮找出最小(大)元素并放到正确位置,逐步完成排序。本文详细介绍了选择排序的图解过程,并提供了代码示例,同时分析了其时间复杂度为O(n^2)。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

算法(2)- 选择排序

概述

选择排序通俗易懂的说法就是在每一轮的排序中找出每个位置对应的数字,比如在第一轮中,找出最小(大)的数字并且放在第一位,第二轮找出第二小(大)的数字放在第二位,以此类推,在第n-1轮里找出倒数第二小(大)的数字放在倒数第二位,剩下的最后一个位置就是最大(小)的数字,选择排序也是比较基础的排序方式,跟冒泡排序其实差不多,都是程序员需要会手写的排序算法

图解

在这里插入图片描述
如上图,该图是第一轮的详细图解。第一次默认min值是左边第一个,即min=5,然后让min值与剩下的值一一比较。即第一次min值与8比较,5小于8,所以min值还是5。第二次,min值与1相比较,5小于1。这时,min值变成1,即min=1,但是5和1的位置不交换。第三次,min值与4比较,4大于1,min值还是1。第四次,min值与3比较,3大于1,min值还是1。此时,第一遍的循环已经结束,然后让现在的min值与第一次的min值的位置相交换。即1与5的位置相交换。
在这里插入图片描述
如上图,该图是完整的选择排序过程,第一轮找出最小的min=1,并且放在第一位,第二轮找出第二小的min=3,放在第二位,第三次,找出第三小的min=4,放在第三位,第四次,找出第四小的min=5,放在第四位,此时只剩下第五位的数字8,自然而然的就是最大的数,且位置的最后一位。

代码

public void sort(int array[]){
        //循环控制轮数,只需要进行到倒数第二轮,到此轮就剩下两个数,此轮结束后数组就已经排序好了
        for(int i=0;i<array.length-1;i++){
            //寻找每轮最小的数
            int min = i;
            //循环控制每轮找最小数字的次数
            for(int j=i+1;j<array.length;j++){
                //如果找到数字比当前的min值小,那么久把min值设置为该数字
                if(array[j]<array[min]){
                    min = j;
                }
            }
            //每轮寻找min值的循环次数结束,此时min值是该轮里最小的,然后再交换min值与第i个数字的位置
            int temp = array[i];
            array[i] = array[min];
            array[min] = temp;
        }
    }

时间复杂度

第一轮需要找(n-1)次,第二轮需要找(n-2)次,以此类推第(n-1)轮需要找1次,则总共需要 ∑ i = 1 n − 1 ( n − 1 ) = 1 + 2 + 3 + . . . + ( n − 1 ) = n 2 2 − n 2 \sum_{i=1}^{n-1} (n-1)=1+2+3+...+(n-1)=\frac{n^2}{2}-\frac{n}{2} i=1n1(n1)=1+2+3+...+(n1)=2n22n次,所以选择排序的时间复杂度为:O( n 2 n^2 n2)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值