【算法】选择排序算法原理及实现

简介: 【算法】选择排序算法原理及实现

1.什么是选择排序

  • 选择排序这种算法是一种较为简单直观的排序算法。
  • 这个算法的基本思想就是:首先在没有排序的数列里找出最小的元素,并把它放到这一组数列最开始的位置;
  • 接着就是把剩余没有排序的元素里继续寻找最小的元素,把它放在已经排序好的序列的后面
  • 依次类推,直到最后面把所有的元素都排序完。

2.选择排序算法图解

  • 有7个数组组成的无序数列 :8,2,6,4,3,7,5 希望从小到大排。


75e95c5dfcd0446ba7ae8c1d82691352.jpg

  • 根据选择排序算法的实现思路来完成排序

64412b0a3d3b4ebfbc7a17c4007b0a28.jpg

d5113021fbd54d26952745d549ee2fd8.jpg

3.选择排序编码实现

(1)整体代码实现

/**
 * 选择 排序算法
 */
public class SelectSort {
    public static void main(String[] args) {
        int[] arr = {8,2,6,4,3,7,5};
        System.out.println("排序前:");
        System.out.println(Arrays.toString(arr));
        selectSort(arr);
        System.out.println("排序后:");
        System.out.println(Arrays.toString(arr));
    }
    public static void selectSort(int[] arr){
        //从第一个元素开始循环,每次比较都会 把最小的放在当前循环的元素上
        for (int i = 0;i<arr.length-1;i++){
            //记录当前元素的index
            int index = i;
            //开始从当前元素的下一个元素进行比较,直至比较到末尾
            for (int j = index+1; j < arr.length; j++) {
                //如果发现后面的元素比当前记录的index索引小的话就将数值小的索引付给index
                //直至循环结束,得到最小元素的索引下表
                if(arr[j]<arr[index]){
                    index=j;
                }
            }
            //拿到最小index之后,就进行数据交换
            //先判断下我们找到的最小的index 和当前元素的索引是不是相等的
            //如果是相等就不在进行交换,说明当前索引的元素就是最小值
            if(index!=i){
                int temp=arr[i];
                arr[i]=arr[index];
                arr[index]=temp;
            }
            System.out.print("第"+(i+1)+"轮:");
            System.out.println(Arrays.toString(arr));
        }
    }
}

(2)测试结果

8e38200f3dc8486994bdd89dc4ea66af.jpg

目录
打赏
0
0
0
0
60
分享
相关文章
解析HashSet的工作原理,揭示Set如何利用哈希算法和equals()方法确保元素唯一性,并通过示例代码展示了其“无重复”特性的具体应用
在Java中,Set接口以其独特的“无重复”特性脱颖而出。本文通过解析HashSet的工作原理,揭示Set如何利用哈希算法和equals()方法确保元素唯一性,并通过示例代码展示了其“无重复”特性的具体应用。
92 3
多代理强化学习综述:原理、算法与挑战
多代理强化学习是强化学习的一个子领域,专注于研究在共享环境中共存的多个学习代理的行为。每个代理都受其个体奖励驱动,采取行动以推进自身利益;在某些环境中,这些利益可能与其他代理的利益相冲突,从而产生复杂的群体动态。
472 5
深度强化学习中SAC算法:数学原理、网络架构及其PyTorch实现
软演员-评论家算法(Soft Actor-Critic, SAC)是深度强化学习领域的重要进展,基于最大熵框架优化策略,在探索与利用之间实现动态平衡。SAC通过双Q网络设计和自适应温度参数,提升了训练稳定性和样本效率。本文详细解析了SAC的数学原理、网络架构及PyTorch实现,涵盖演员网络的动作采样与对数概率计算、评论家网络的Q值估计及其损失函数,并介绍了完整的SAC智能体实现流程。SAC在连续动作空间中表现出色,具有高样本效率和稳定的训练过程,适合实际应用场景。
330 7
深度强化学习中SAC算法:数学原理、网络架构及其PyTorch实现
理解CAS算法原理
CAS(Compare and Swap,比较并交换)是一种无锁算法,用于实现多线程环境下的原子操作。它通过比较内存中的值与预期值是否相同来决定是否进行更新。JDK 5引入了基于CAS的乐观锁机制,替代了传统的synchronized独占锁,提升了并发性能。然而,CAS存在ABA问题、循环时间长开销大和只能保证单个共享变量原子性等缺点。为解决这些问题,可以使用版本号机制、合并多个变量或引入pause指令优化CPU执行效率。CAS广泛应用于JDK的原子类中,如AtomicInteger.incrementAndGet(),利用底层Unsafe库实现高效的无锁自增操作。
111 0
理解CAS算法原理
令牌桶算法原理及实现,图文详解
本文介绍令牌桶算法,一种常用的限流策略,通过恒定速率放入令牌,控制高并发场景下的流量,确保系统稳定运行。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
令牌桶算法原理及实现,图文详解
【AI系统】布局转换原理与算法
数据布局转换技术通过优化内存中数据的排布,提升程序执行效率,特别是对于缓存性能的影响显著。本文介绍了数据在内存中的排布方式,包括内存对齐、大小端存储等概念,并详细探讨了张量数据在内存中的排布,如行优先与列优先排布,以及在深度学习中常见的NCHW与NHWC两种数据布局方式。这些布局方式的选择直接影响到程序的性能,尤其是在GPU和CPU上的表现。此外,还讨论了连续与非连续张量的概念及其对性能的影响。
121 3
5大负载均衡算法及原理,图解易懂!
本文详细介绍负载均衡的5大核心算法:轮询、加权轮询、随机、最少连接和源地址散列,帮助你深入理解分布式架构中的关键技术。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
5大负载均衡算法及原理,图解易懂!
OSPF的路由计算算法:原理与应用
OSPF的路由计算算法:原理与应用
117 4
OSPF的SPF算法介绍:原理、实现与应用
OSPF的SPF算法介绍:原理、实现与应用
151 3
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等