码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 选择排序的简单理解


    详细描述

    选择排序的工作原理是:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾,以此类推,直到全部待排序的数据元素的个数为零。

    选择排序详细的执行步骤如下:

    1. 初始状态:无序区为 R[1..n],有序区为空;
    2. 第 i 趟排序 (i=1,2,3…n-1) 开始时,当前有序区和无序区分别为 R[1...i-1] 和 R(i...n)。该趟排序从当前无序区中选出关键字最小的记录 R[k],将它与无序区的第 1 个记录 R 交换,使 R[1...i] 和 R[i+1...n) 分别变为记录个数增加 1 个的新有序区和记录个数减少 1 个的新无序区;
    3. 经过 n-1 趟,无序序列就有序化了。

    算法图解

    选择排序

    问题解疑

    为什么选择排序是不稳定的?

    虽然原理上存在有序区和无序区的区分,但是选择排序算法为了提高空间的使用率,使用的是原地交换方式。

    与冒泡排序两两比较交换不同,选择排序算法是最小的元素与固定位置的元素进行交换,当这个固定位置的元素被交换到另一个位置之后,也就有可能导致相等的数字次序变化。

    选择排序的时间复杂度是多少?

    无论原序列是有序还是无序,选择排序都需要对序列做完整的遍历,即最好情况时间复杂度和最坏情况时间复杂度都是 O(n2);平均时间复杂度是 O(n2)。

    代码实现

    package cn.fatedeity.sort;
    /**
    * 选择排序算法
    */
    public class SelectionSort {
    private static void swap(int[] numbers, int src, int target) {
    int temp = numbers[src];
    numbers[src] = numbers[target];
    numbers[target] = temp;
    }
    public static int[] sort(int[] numbers) {
    for (int i = 0; i < numbers.length - 1; i++) {
    for (int j = i + 1; j < numbers.length; j++) {
    if (numbers[i] <= numbers[j]) {
    continue;
    }
    swap(numbers, i, j);
    }
    }
    return numbers;
    }
    }
  • 相关阅读:
    java笔试题含答案总结
    flink1.13.2 text文本数据迁移为orc+snappy数据解决方案
    上海各梯队IB学校怎么选?
    CentOS7配置NFS服务并设置客户端自动挂载
    线性表(顺序表,单链表,双链表,循环链表,静态链表)
    【论文笔记】A Survey on Federated Learning: The Journey From Centralized to Distributed On-Site Learning and Beyond(综述)
    QT+OSG/osgEarth编译之十八:geos+Qt编译(一套代码、一套框架,跨平台编译,版本:geos-3.11.0)
    vue2知识点————(父子通信)
    【Vue.js 3.0源码】AST 转换之节点内部转换
    Python决策树
  • 原文地址:https://www.cnblogs.com/fatedeity/p/16390219.html
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号