选择排序

作者: ITsCLG | 来源:发表于2019-12-25 11:39 被阅读0次

    选择排序也是一种常见的算法,小编觉得直接讲太多文字有点啰嗦,我们直接从例子入手,来看看选择的实现过程,从实现过程来看看该算法的特征,并分析其时间复杂度。

一、例子讲解

    有以下数组array[8]={6,3,2,1,8,9,7,5}。

array数组

    第一轮排序开始。此时所有元素处于无序区域。在无序区域中找出最小的元素1。并且把元素1与无序区域内的第一个元素交换。元素1即被加入到有序区域。

第一轮排序

    第二轮排序开始。在无序区域所有元素中找出最小的元素2,并且把元素2与无序区域内的第一个元素交换。元素2即被加入到有序区域。

第二轮排序

    第三轮排序开始。在无序区域所有元素中找出最小的元素3,由于元素3就是无序区域的第一个元素,因此不交换。元素3加入到有序区域。

第三轮排序

    第轮排序开始。在无序区域所有元素中找出最小的元素5,并且把元素5与无序区域内的第一个元素交换。元素5即被加入到有序区域。

第四轮排序

    轮排序开始。在无序区域所有元素中找出最小的元素6,并且把元素6与无序区域内的第一个元素交换。元素6即被加入到有序区域。

第五轮排序

    轮排序开始。在无序区域所有元素中找出最小的元素7,并且把元素7与无序区域内的第一个元素交换。元素7即被加入到有序区域。

第六轮排序

    轮排序开始。在无序区域所有元素中找出最小的元素8,并且把元素8与无序区域内的第一个元素交换。元素8即被加入到有序区域。

第七轮排序

    此时,有序区域元素个数为8,而无序区域个数为1,,可得最后一个无序区域的元素即为有序区域的最后一个元素。

得到有序数组

    根据图解的实现过程,我们可以编写出选择排序相对应的C++实现代码。

二、代码截图

选择排序算法

三、时间和空间复杂度

    通过上述代码截图,可以发现决定算法时间复杂度的函数为selectSort。该函数中使用了嵌套的循环,程序的总执行步数最多,为n^2【可翻看小编以前的简书lookyilook】,因此该选择排序的时间复杂度为O(n^2)。

    空间复杂度,最优的情况下(已经有顺序)复杂度为:O(0)【不用借助辅助变量】;最差的情况下(全部元素都要重新排序)复杂度为:O(n )【需要n个辅助变量】;平均的时间复杂度:O(1)。

    有错请指正!

相关文章

  • 算法-选择排序

    算 法:选择排序算法时间复杂度: 选择排序算法概述 选择排序伪代码 选择排序实现 选择排序算法概述 排序算法有许...

  • 常见排序算法

    这里介绍四种排序算法,选择排序、快速排序、归并排序、计数排序 选择排序(使用递归) 选择排序(使用循环) 快速排序...

  • 常用的两种排序-冒泡、选择

    Swift版 冒泡排序 选择排序 OC版 冒泡排序 选择排序

  • 数据结构之排序

    选择排序1.直接选择排序 原理直接选择排序过程直接选择排序过程 实现: DataWrap.java来模拟待排序的数...

  • 记录几个常见的排序算法

    常见的排序有:快速排序、冒泡排序、希尔排序、选择排序、插入排序、归并排序 冒泡排序: 插入排序: 选择排序: 希尔...

  • PHP常用算法

    基于选择的排序算法 常见的基于选择的排序算法有:冒泡排序、插入排序、选择排序、归并排序和快速排序,我们在选在排序算...

  • 排序 -- 选择/插入

    聊聊排序吧 冒泡排序 选择排序 插入排序 快速排序 归并排序 计数排序 桶排序 堆排序 本篇 选择排序与插入排序 ...

  • java快速学习排序---选择排序

    1.java实现选择排序 (1)、图解选择排序 (2)、选择排序的思想 选择排序首先在未排序序列中找到最小(大)元...

  • IOS 常用算法

    一:排序算法 排序方式有插入排序,选择排序和交换排序三种。插入排序有直接插入排序和希尔排序。选择排序有简单选择排序...

  • 给自己备份的排序代码

    交换排序 冒泡排序 快速排序 插入排序 直接插入排序 希尔排序 选择排序 简单选择排序 堆排序

网友评论

    本文标题:选择排序

    本文链接:https://www.haomeiwen.com/subject/trqcoctx.html