前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【小算法】选择排序

【小算法】选择排序

作者头像
Frank909
发布2020-01-13 14:42:59
8860
发布2020-01-13 14:42:59
举报
文章被收录于专栏:Frank909Frank909

选择排序是一种非常容易理解的算法。

算法思路

假设有下面一组数据,需要从小到大升序排列。

选择排序的算法是

代码语言:javascript
复制
1. 创建一个列表或者数组
2. 第一次遍历数组,找出最小的一个数存放在新的数组中。
3. 第二次遍历数组,找出次小的数存放在新的数组。
4. 重复类似操作,直到所有的数据排列完成

图例示意:

在这里插入图片描述
在这里插入图片描述

Python 代码演示:

代码语言:javascript
复制
def sort(srcArr):

    dstArr = []
    size = len(srcArr)

    while len(dstArr) < size:
        
        temp = srcArr[0]
        tempindex = 0

        for index in range(0,len(srcArr)):
            if srcArr[index] < temp:
                temp = srcArr[index]
                tempindex = index

        srcArr.pop(tempindex)
        dstArr.append(temp)

    return dstArr



if __name__ == "__main__":

    arr = [3,2,8,4,1,6,5]
    print("=======================")
    print(arr)

    result = sort(arr)

    print("=======================")
    print(result)

运行结果如下:

代码语言:javascript
复制
=======================
[3, 2, 8, 4, 1, 6, 5]
=======================
[1, 2, 3, 4, 5, 6, 8]

可以看到,排序结果正确。

时间复杂度

用大 O 表示法,选择排序的时间复杂性度是 O(n2)O(n^2)O(n2).

一个列表有 n 个元素,遍历一次需要 n 次操作,所以一次遍历是 O(n)O(n)O(n).

选择排序要进行 n 次遍历,所以时间复杂性度就是 O(n∗n)O(n*n)O(n∗n)。

有同学可能会问,只有第一次遍历会访问 n 个元素,后面的遍历中,访问的元素数量一次减少,最后一次遍历时,只需要访问一个数据,那么为什么还是 O(n∗n)O(n*n)O(n∗n)?

如果严格按照数学公式,结果应该是

O(n+n−1+n−2+n−3+...+2+1)=O((n+1)∗n/2) O(n+n-1+n-2+n-3+...+2+1)=O((n+1)*n/2) O(n+n−1+n−2+n−3+...+2+1)=O((n+1)∗n/2)

但是,在大O 表示法中,常数项可以被省略,所以最终还是要用O(n2)O(n^2)O(n2)表示,这一结果表示选择排序并不快。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-08-06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 算法思路
  • 图例示意:
  • Python 代码演示:
  • 时间复杂度
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档