首页 > 编程语言 >python算法之最low三人组之一——————选择排序

python算法之最low三人组之一——————选择排序

时间:2024-11-11 20:15:21浏览次数:3  
标签:三人组 min python 复杂度 最小 li 循环 low 序列

之前讲过了冒泡排序,我们再聊一聊最low三人组中的选择排序,选择排序的基本思想是:遍历整个序列,选取其中一个最小的数取出来,然后再次遍历除了刚刚选出来的最小的数的序列中最小的数

现在让我们看看代码实现

import random
def select_sort(li):
    new_li=[]
    for i in range(len(li)-1):    #第几趟遍历序列
        min_m=min(li)
        new_li.append(min_m)
        li.remove(min_m)
        print(new_li)
    print(new_li)
li=[random.randint(1,100) for i in range(10)]
print (li)
select_sort(li)

定义一个空的序列new_li来接受从li序列里面选到的最小的数,利用append内置函数将其加入新序列,再用remove内置函数删除原序列中的最小数,并在循环里加入print函数,看循环每一步的变化。

但是!!!!!我们写程序时应该注意时间复杂度和空间复杂度,正常情况下,时间复杂度最先考虑,在这个代码中明面上的时间复杂度为n,因为有一层循环,但是内层函数min()也是有n的时间复杂度,所以是n^2的时间复杂度。而且空间复杂度也有两倍的序列长度,那我们怎么办,才能解决呢。

进阶的方法在此!!!!

        我们换个思想,不建立新的列表来接受数,我们就把最小的数放到序列最前面,然后循环后面的序列即可,这样空间复杂度解决了,那时间复杂度我们看看代码

def select_sort(li):
    for i in range(len(li)-1):
        min_li=i
        for j in range(i+1,len(li)):
            if li[j]<li[min_li]:
                min_li=j
        li[i],li[min_li]=li[min_li],li[i]
    print(li)

新代码的思想为:用min_li来记录最小数的下标,最开始赋值为第一个数的下标,第一层循环为第几趟,第二层循环为取出循环中最小的数的下标,循环开始 为i+1,因为不需要和自己比较,所以不是从i开始,内层循环第i+1个数与下标为min_li的数比较,如果j小则赋值j给min_li,一次循环结束以后,交换最小的数到最前面则解决了时间复杂度的问腿,新代码的时间复杂度为o(n)

标签:三人组,min,python,复杂度,最小,li,循环,low,序列
From: https://blog.csdn.net/2301_78050920/article/details/143694059

相关文章

  • python毕设车辆维修管理系统程序+论文
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、选题背景关于车辆维修管理系统的研究,现有研究多集中在传统维修流程的信息化实现方面,例如用户信息管理、车辆基本信息维护等通用功能的实现 [1......
  • Python小白学习教程从入门到入坑------第二十九课 访问模式(语法进阶)
    目录一、访问模式1.1 r1.2 w1.3 + 1.3.1r+1.3.2w+1.3.3a+1.4a一、访问模式模式可做操作若文件不存在是否覆盖r只能读报错-r+可读可写报错是w只能写创建是w+可读可写创建是a只能写创建否,追加写a+可读可写创建否,追加写1.1 rr:只读模式(默认模式),文件......
  • Python小白学习教程从入门到入坑------第三十课 文件定位操作(语法进阶)
    一、文件指针python中严格来说没有指针这个说法,但有指针这个用法的体现。指针概念常用于c语言、c++语言中在Python的文件操作中,文件指针(也称为文件游标或文件句柄的位置)是一个内部标记,它指示了当前文件操作的读写位置,文件指针在打开文件时初始化,并随着文件的读写操作而移动......
  • python毕设艺术团管理系统程序+论文
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、选题背景关于艺术团管理系统的研究,现有研究主要以通用的社团管理系统为主,专门针对艺术团这一特殊团体的管理系统研究较少。在国内外,社团管理系......
  • python之函数
    一、什么是函数定义:函数是组织好,可重复使用,用来实现单一,或关联功能的代码段二、pycharm中的表结构项目,包(init)或目录,py文件,py文件包含多个函数或类等三、函数的有哪些优点?1、降低代码冗余2、增加代码的复用性,提高开发效率3、提高程序的拓展性4、封装:就是把代码片段放在函......
  • 数学与统计计算:Python math 与 statistics库基础教程
    数学与统计计算:Pythonmath与statistics库基础教程在数据分析、机器学习和科学计算中,数学和统计学是两个至关重要的基础。Python提供了强大的内置库math和statistics,可以帮助我们快速、方便地完成常见的数学和统计计算。本篇博客将介绍math和statistics库中的基......
  • 管理 Python 环境和依赖关系的工具 venv、virtualenv、pipenv 、poetry 、 miniforge
    管理Python环境和依赖关系的工具venv、virtualenv、pipenv、poetry、miniforge和anaconda的区别venv、virtualenv、pipenv、Poetry、Miniforge和Anaconda都是用于管理Python环境和依赖关系的工具,但它们在功能和使用场景上有一些显著的区别。以下是它们的主要区别:v......
  • 使用wxpython开发跨平台桌面应用,基类列表窗体的抽象封装处理
    在开发一套系统框架的时候,除了关注实现系统的功能实现外,我们对于系统的各个方面都是应该精益求精,以最少的编码做最好的事情,在开发的各个层次上,包括前端后端,界面处理、后端处理、常用辅助类、控件封装等等方面,我们都可以通过抽象、重用等方式,实现代码的优化、简化,以期达到快速开发......
  • 地下水数值模拟软件Visual MODFLOW Flex安装,PEST操作方法,Aquifer Test抽水试验设计,地
    主要围绕的目前应用较为广泛的VisualModflowFlex6.1软件版本开展,结合具体应用场景,实例讲解软件的全流程应用过程,包括数据处理分析、数值模型构建以及模拟结果的输出等。本教程有助于提升技术人员地下水模拟软件的操作能力,解决地下水数值模拟技术实施过程中遇到的困难。同时,......
  • Python之函数5.1
    函数:一、什么是函数定义:函数是组织好,可重复使用,用来实现单一,或关联功能的代码段二、pycharm中的表结构项目,包(init)或目录,py文件,py文件包含多个函数或类等三、函数的有哪些优点?1、降低代码冗余2、增加代码的复用性,提高开发效率3、提高程序的拓展性4、封装:就是把代码片段......