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

理论基础 —— 排序 —— 直接选择排序概述 直接选择排序又称简单选择排序 是一种不稳定的排序方法 其是选择排序中最简单一种 其基本思想是 第 i 趟排序再待排序序列 a i a n 中选取关键码最小的记录 并和第 i 个记录交换作为有序序列的第 i 个记录 其实现利用双重循环 外层 i 控制当前序列最小值存放的数组元素位置 内层循环 j 控制从 i 1 到 n 序列中选择最小的元素所在位置 k 排序过程 1 排序

【概述】

直接选择排序又称简单选择排序,是一种不稳定的排序方法,其是选择排序中最简单一种,其基本思想是:第 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]); } }

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/232085.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • C语言 图书销售管理系统[通俗易懂]

    C语言 图书销售管理系统[通俗易懂]C语言图书销售管理系统

    2022年5月2日
    72
  • java代码 软件_适合新手的java代码编写软件有哪些?

    java代码 软件_适合新手的java代码编写软件有哪些?适合新手的java代码编写软件有哪些?发布时间:2020-05-1816:39:11来源:亿速云阅读:196作者:Leah适合新手的java代码编写软件有哪些?相信很多人对java代码编写软件的了解处于一知半解状态,小编给大家总结了以下内容。如下资料是关于java代码编写软件的内容。1、eclipseEclipse是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和…

    2022年9月23日
    2
  • msm8937之I2C配置

    msm8937之I2C配置msm8937.dtsi中aliases{i2c1=&i2c_1;i2c2=&i2c_2;i2c3=&i2c_3;i2c4=&i2c_4;i2c5=&i2c_5;i2c6=&i2c_6;i…

    2022年10月18日
    2
  • 产品密钥无法激活成功,最后使用visio2013激活软件激活成功。「建议收藏」

    产品密钥无法激活成功,最后使用visio2013激活软件激活成功。「建议收藏」装了visio2013,使用网上搜索的产品密钥,没有一个能够激活成功。最后发现了visio的一个激活软件KMSpico,成功激活。激活成功教程工具KMSpico_setup.exe下载地址:https://pan.baidu.com/s/1wElfmRaufSpQGloLgQC64g提取码:kv2h安装后,从开始->程序->KMSpico->启动KMSpic…

    2022年6月24日
    64
  • idea2022.01.12激活码永久[最新免费获取]2022.03.02

    (idea2022.01.12激活码永久)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~40ZKSWCX8G-eyJsaWNlb…

    2022年4月2日
    59
  • ATM(异步传输模式)是什么?

    ATM(异步传输模式)是什么?异步传输模式(ATM)也称为信元中继(在固定大小的信元中传输数据),通过光纤或双绞线电缆(高速交换)在OSI模型的数据链路层(第2层)运行基于ITU-T宽带综合业务数字网络(B-ISDN)标准的网络技术,该标准是电信业开发的自动取款机可以同时传输各种流量:语音、视频和数据,速度高达每秒155兆比特。它将语音和视频数据转换成数据包,并通过相同的介质传输大数据包数据。自动取款机和TCP。由于两个端点之间使用固定通道路由协议路由,所以/IP是不同的。实时低延迟应用程序,如VoIP和视频,在ATM网络上..

    2022年9月21日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号