理论基础 —— 排序 —— 直接选择排序

2023-05-16

【概述】

直接选择排序又称简单选择排序,是一种不稳定的排序方法,其是选择排序中最简单一种,其基本思想是:第 i 趟排序再待排序序列 a[i]~a[n] 中选取关键码最小的记录,并和第 i 个记录交换作为有序序列的第 i 个记录。

其实现利用双重循环,外层 i 控制当前序列最小值存放的数组元素位置,内层循环 j 控制从 i+1 到 n 序列中选择最小的元素所在位置 k

【排序过程】

1.排序过程

具体的排序过程为:

  1. 将整个记录序列划分为有序区和无序区,初始时有序区为空,无序区含有待排序的所有记录
  2. 在无序区选择关键码最小的记录,将其与无序区中的第一个元,使得有序区扩展一个记录,同时无序区减少了一个记录
  3. 不断重复步骤 2,直到无序区只剩下一个记录为止

2.实例

 初始关键字:『 852693140

 第一趟排序后:0,『526931487

 第二趟排序后:01,『26935487

 第三趟排序后:012,『6935487

 第四趟排序后:0123,『965487

 第五趟排序后:01234,『65987

 第六趟排序后:012345,『6987

 第七趟排序后:0123456,『987

 第八趟排序后:01234567,『89

 第九趟排序后:012345678,『9

 结果:           012345678

          

     排序过程                    宏观过程

【时空复杂度分析】

容易看出,待排序序列为正序,移动次数最小,为 0 次;待排序序列为逆序时,移动次数最多,为 3(n-1) 次。

但无论记录的初始排列如何,关键码的比较次数相同,第 i 趟排序需进行 n-i 次关键码的比较,而简单选择排序需要进行 n-1 趟排序,因此,总的比较次数为 O(n^2)

故而,无论是最优、最差时间复杂度,还是平均时间复杂度,均为 O(n^2)

对于空间复杂度来说,简单选择排序仅需一个存储空间用于记录交换的暂存单元,即空间复杂度为 O(1)

【源程序】

void selectSort(int a[],int n){
    for(int i=1;i<=n-1;i++){//进行n-1趟选择
        int index=i;
        for(int j=i+1;j<=n;j++)//从无序区选取最小的记录
            if(a[index]>a[j])
                index=j;
        if(index!=i)
            swap(a[i],a[index]);
    }
}

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

理论基础 —— 排序 —— 直接选择排序 的相关文章

  • Kali打包APK报错,Using Apktool 2.x.x-dirty org/apache/commons/text/StringEscapeUtils

    Kali xff08 2021 4a 2022 03 xff09 的apktools工具有问题 先卸载 xff1a apt get purge remove apktool 重新安装 xff1a 下载 Linux版wrapper scrip
  • I2C时钟延展

    转载自http blog sina com cn s blog 15fd81ac70102wvgw html xff0c 本文仅作为笔记备份 什么是I2C时钟延展 xff08 SCL Stretching xff09 xff1f 在I2C的
  • 树莓派 设置wifi 优先于有线网口

    亲测了好使 我的dhcpcd conf是这样的 成功之后是这样的 wlan0在上面 pi 64 raspberrypi ip route show default via 192 168 77 1 dev wlan0 src 192 168
  • nginx配置之调试配置

    用于调试和定位的问题的配置项 是否以守护进程方式运行Nginx 语法 xff1a daemon on off 默认 xff1a daemon on 作用 xff1a 守护进程是可以脱离终端并且在后台运行的进程 他脱离是为了避免进程执行过程中
  • python之while语句详解

    python之while语句详解 1 基本介绍2 while语句练习2 1 求100以内所有奇数或偶数之和2 2 求100以内9的倍数之和 xff0c 以及个数2 3 输出九九乘法表2 4 猜数字2 5 循环嵌套 1 基本介绍 xff08
  • 使用栈判断回文

    一 背景 什么是回文 xff1f 比如abba abbba 1221等 xff0c 从前读和从后读都一样 xff0c 这就是回文 abab就不是回文 xff0c 因为从前读和从后读不一样 那么 xff0c 你能够写一个程序判断一个字符串是否
  • ant-design-vue 日期组件国际化

    在入口文件main js中 import moment from 39 moment 39 import 39 moment locale zh cn 39 moment locale 39 zh cn 39 其中moment函数可以将日期
  • linux 查看启动项

    查看启动项 chkconfig list chkconfig level x name on off z B chkconfig level 5 openvpn off 以上的命令可以查询系统可提供的服务 xff0c 如果希望开机时启动某一
  • 解决报错libssl.so.1.1: cannot open shared object file: No such file or directory

    解决报错libssl so 1 1 cannot open shared object file No such file or directory Linux运维 更新于 2020年8月25日 0 条评论 Centos7 默认提供的 op
  • nginx代理下django debug toolbar不显示

    nginx代理的django服务 xff0c 平时正常 xff0c 今天不显示 xff0c 不用nginx代理正常 xff0c 查了半天 xff0c 突然想起来上午把nginx代理的静态文件下的debug toolbar静态文件夹给删了 x
  • Hadoop中的HDFS文件下载到远程机

    使用Hadoop下载文件不落地直接到远程服务器 xff0c 使用到hadoop api和JSch 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题 xff0c 有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的
  • cookie 存放地点

    什么是Cookie xff1f A cookie also known as an HTTP cookie web cookie or browser cookie is a small piece of data sent from a
  • boost使用之编译库及遇到的问题

    最近因为在学习网络编程相关的东西 xff0c 准备学习一下boost xff0c 毕竟原生的网络编程太麻烦 看了一下其实windows下想使用起来很简单 xff0c 就是下载库 xff0c 然后运行脚本 xff0c 然后运行exe库就出来
  • windows消息机制(MFC)

    消息分类与消息队列 Windows中 xff0c 消息使用统一的结构体 xff08 MSG xff09 来存放信息 xff0c 其中message表明消息的具体的类型 xff0c 而wParam xff0c lParam是其最灵活的两个变量
  • POSTGRESQL表、字段添加注释和查询注释

    postgresql的注释工具层面的支持并不友好 xff0c 因此可采用命令的形式来进行字段 表进行添加注释 同时 xff0c 也可以通过一条SQL语句来查询字段的注释和类型 首先我们来看添加注释 xff1a 表添加注释 comment o
  • Armbian bullseye 系统OMV 6.x安装分享

    OMV 5 x网上教程很多 6 x的官方有方法 xff0c 但是因为墙的原因 xff0c 要换源 对初学者来说并没有一份完全照抄的教程参考 经过一番摸索 总结了下OMV 6 x的安装过程如下 第一步当然是Armbian系统烧录 这步网上教程
  • 使用Go语言 在windows下 实现隐藏进程命令行参数 保护密码等数据

    C语言在unix下可以通过直接覆写argv的方式隐藏参数 xff0c 但是在windows下由于win32 api的限制 xff0c 获取到的参数是一串连续的字符串 xff0c 在C语言的main函数调用之前已经由C标准库实现了分割 xff
  • Linux 环境部署-- gitlab

    一 安装并配置必要的依赖关系 1 安装ssh yum install y curl policycoreutils pythonopenssh server 2 将SSH服务设置成开机自启动 xff0c 安装命令 xff1a sudo sy
  • Mysql先排序后分组(全网最有效最简单的办法)

    Mysql先排序后分组 mysql常见的排序分组是使用子查询先排序再分组 xff0c 我们来用另外一种方式实现简单的分组排序 1 创建测试数据表 此步骤省略 2 生成测试数据 此步骤省略 3 直接上查询代码 第一层 xff1a 查询基础数据
  • 视音频数据处理入门:颜色空间(二)---ffmpeg

    目录 概述 流程 相关流程 初始化方法 初始化代码 转换方法 转换代码 释放方法 整体代码介绍 代码路径 概述 本篇简单说一下基于FFmpeg的libswscale的颜色空间转换 xff1b Libswscale里面实现了各种图像像素格式的

随机推荐