选择排序

学习这些算法,不仅仅是要学习使用,更要学习的是其中的思想。

举例

那么说到选择排序,大家可以先想一下,生活中,什么地方会用到选择排序呢?我先来给大家举几个例子:

  1. 打麻将的时候,咱们是不是先把所有牌都展开,然后用选择排序的思想去排顺序呢?
  2. 还是扑克牌,当我们整理扑克牌是直接按照顺序来排序,每次都选择最小的牌来放。

思考

那么选择排序的中心思想是什么呢?
从无序到有序的这个过程,最重要的一个思想是什么呢?
是我们如何看待第一个待排序的元素,选择排序的中心思想,就是将第一个元素,此时将它看成符合条件的一个元素,比如将它看成最大的,或者最小的,然后用它去和后面的去对比。
第一个,就是最大的一个。如此,第二个元素,才可与之相比,并进行排序。

实例

既然了解了生活中的使用,那么我们也来看一下从代码层面,我们应该如何使用选择排序,咱们来看看代码如何实现。

public static void selectSort(int[] arr) {
    for (int i = 0; i < arr.length - 1; i++) {
        int min = i;
        for (int j = i + 1; j < arr.length; j++) {
            if (arr[j] < arr[min]) {
                min = j;
            }
        }
        
        if (min != i) {
                 arr[min]=arr[min]+arr[i];
                arr[i]=arr[min]-arr[i];
                arr[min]=arr[min]-arr[i];
        }
    }
} 

从我们的代码来看,有两层循环,而且比较次数永远都是那么多,从交换来看,极好情况下,无须交换,极差情况下,需要交换n-1次,总的来说,时间复杂度为O(n2)

后续

笑死,这代码也有问题,不过我已经改了,这会儿可以运行了。
2022.11.25

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

盖丽男

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值