选择排序基本概念

news2024/11/29 4:32:46

选择排序基本概念

  • 1.选择排序
    • 1.1 基本概念
    • 1.2 选择排序执行步骤有
    • 1.3 对于5个元素的值步骤次数
    • 1.4 选择排序大O记法表示
  • 2. 将[4,2,7,1,3]进行选择排序 【实战】
    • 2.1 第一次轮回步骤
    • 2.2 第二次轮回步骤
    • 2.3 第三次轮回步骤
    • 2.4 第四次轮回步骤
  • 3.选择排序代码实现
    • 3.1 根据最小值排序
    • 3.2 根据最大值排序

1.选择排序

1.1 基本概念

  • 选择排序效率比冒泡排序高,但是大O记法一样
  • 操作步骤
    • 根据最小值
      • 从左至右依次检查数据,找出值最小的那个。
      • 在此过程中,会用一个变量记录检查过的最小值的索引,如果未检查的数值小于最小值,就把最小值改为新的索引
    • 根据最大值
      • 从左至右依次检查数据,找出值最大的那个。
      • 在此过程中,会用一个变量记录检查过的最大值的索引,如果未检查的数值大于最大值,就把最大值改为新的索引

1.2 选择排序执行步骤有

  • 比较:比较值
  • 交换:交换值

1.3 对于5个元素的值步骤次数

次数第一轮回第二轮回第三轮回第四轮回
对比次数4321
交换次数【按照最多交换次数计算】1111
  • 总步骤为:(4+3+2+1)+1*4=14

1.4 选择排序大O记法表示

N个元素最多步骤【比较+交换】 N 2 2 \frac{N^2}{2} 2N2
510+4=1412.5
1045+9=5450
20180+19=199200
40780+39=819800
803160+79=32393200
  • 发现,随着N的增长,步数大致增长为 N 2 2 \frac{N^2}{2} 2N2
  • 选择排序的大O记法:O( N 2 N^2 N2)【大O记法忽略常数】

2. 将[4,2,7,1,3]进行选择排序 【实战】

  • 会进行4次循环(轮回)
  • 选择最小值进行排序

2.1 第一次轮回步骤

在这里插入图片描述

2.2 第二次轮回步骤

在这里插入图片描述

2.3 第三次轮回步骤

在这里插入图片描述

2.4 第四次轮回步骤

在这里插入图片描述

3.选择排序代码实现

3.1 根据最小值排序

# 方式一
alist = [4, 2, 7, 1,3]
def sort(alist):
    for i in range(len(alist)-1):
        min_index = i  # 记录最小值索引
        for j in range(i+1,len(alist)):
            if alist[j]<alist[min_index]:
                min_index = j       #找出最小值,将找出最小值索引赋值给min_index
                # min_index和最前一位交换位置
        alist[i],alist[min_index]=alist[min_index],alist[i]
        print(f"第{i + 1}次轮回结果为:", alist)
sort(alist)

# 方式二
alist = [4, 2, 7, 1,3]
def sort(alist):
    for i in range(len(alist)-1):
        min_index = i  # 记录最小值索引
        for j in range(i+1,len(alist)):
            if alist[j]<alist[min_index]:
                min_index = j       #找出最小值,将找出最小值索引赋值给min_index
                # min_index和最前一位交换位置
        if min_index!=i: # 索引变,交换位置,不变不交换
            alist[i],alist[min_index]=alist[min_index],alist[i]
        print(f"第{i + 1}次轮回结果为:", alist)
sort(alist)

在这里插入图片描述

3.2 根据最大值排序

# 方式一
alist = [3, 8, 5, 7, 6]
def sort(alist):
    for i in range(len(alist)-1):
        max_index = 0
        for j in range(1,len(alist)-i):
            if alist[j]>alist[max_index]:
                max_index = j       #找出最大值,将最大值索引赋值给max_index
                # 最大值和最后一位交换位置
        alist[len(alist)-1-i],alist[max_index]=alist[max_index],alist[len(alist)-1-i]
        print(f"第{i + 1}次轮回结果为:", alist)
sort(alist)

# 方式二
alist = [3, 8, 5, 7, 6]
def sort(alist):
    for i in range(len(alist) - 1):
        max_index = 0
        for j in range(1, len(alist) - i):
            if alist[j] > alist[max_index]:
                max_index = j  # 找出最大值,将最大值索引赋值给max_index
                # 最大值和最后一位交换位置
        if max_index != i: # 索引变,交换位置,不变不交换
            alist[len(alist) - 1 - i], alist[max_index] = alist[max_index], alist[len(alist) - 1 - i]
        print(f"第{i + 1}次轮回结果为:", alist)
sort(alist)

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/331247.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

TypeScript快速入门

TypeScript快速入门1.TypeScript介绍1.1.TypeScript为什么要为JS添加类型支持1.2.TypeScript相比JS优势2.TypeScript初体验2.1.安装编译TS的工具包2.2.编译并运行TS代码2.3.简化运行TS代码3.TypeScript常用类型3.1.类型注解3.2.常用基础类型3.3.原始类型 number/string/boolean…

前端基础html css js

html&#xff1a;框架 css&#xff1a;美化 jp&#xff1a;交互 HTML 1.基础标签 <!DOCTYPE html> <html><head><meta charset"UTF-8"><title>这是我的滴滴滴一个网页</title></head><body><h1>一号 标题&…

Pygame显示文字

使用Pygame显示文字的步骤如图1所示。图1 显示文字的步骤1 Pygame的初始化通过以下代码实现Pygame的初始化。import pygame pygame.init()其中&#xff0c;第1行代码的作用是在程序中导入pygame模块&#xff1b;第2行代码的作用是实现pygame的初始化。2 屏幕的创建使用如下代码…

CacheLib 原理说明

CacheLib 介绍 CacheLib 是 facebook 开源的一个用于访问和管理缓存数据的 C 库。它是一个线程安全的 API&#xff0c;使开发人员能够构建和自定义可扩展的并发缓存。 主要功能&#xff1a; 实现了针对 DRAM 和 NVM 的混合缓存&#xff0c;可以将从 DRAM 驱逐的缓存数据持久…

ESP8266 + STC15基于AT指令通过TCP通讯协议控制IO状态

ESP8266 + STC15基于AT指令通过TCP通讯协议控制IO状态 📌ESP8266 AT固件基于安信可AT固件,相关刷AT固件可以参考《NodeMCU-刷写AT固件》当然WIFI模块也可以是esp01. STC15 单片机采用的是:STC15F2K60S2 晶振频率采用内部:22.1184MHz🌼功能介绍 通过电脑端的网络调试助手…

【C++】类和对象(第一篇)

文章目录1. 面向过程和面向对象初步认识2.类的引入3.类的定义3.1 类的两种定义方式3.2 成员变量命名规则建议4. 类的访问限定符及封装4.1 访问限定符4.2 封装5. 类的作用域6. 类的实例化7. 类对象模型7.1 类对象大小的计算7.2 类对象的存储方式猜测7.3 结构体内存对齐规则复习8…

JDK15 新特性详解,2020-09-15 正式发布

预览版&#xff1a;该功能在当前版本可以使用&#xff0c;如果效果不是很好的话&#xff0c;可能以后的其他版本就会删去该功能。 最终版&#xff1a;该功能在之前版本效果很好&#xff0c;之后的每个版本中都会存在该功能。 Java 5 中的泛型&#xff0c;Java 8 中的 Lambda …

Linux云服务器下怎么重置MySQL8.0数据库密码

文章目录一、修改my.cnf配置文件为mysql免登陆二、免密登陆mysql三.给root用户重置密码1、首先查看当前root用户相关信息&#xff0c;在mysql数据库的user表中2、把root密码置为空3、退出mysql&#xff0c;删除/etc/my.cnf文件中添加进去的skip-grant-tables 重启mysql服务4、使…

FPGA实现AD9708和AD9280波形收发输出HDMI模拟示波器,串口协议帧控制显示,提供工程源码和技术支持

目录1、AD9708芯片解读和电路设计2、AD9280芯片解读和电路设计3、FPGA设计框架4、AD9708波形生成并发送5、AD9280采集接收波形6、HDMI波形显示算法7、串口协议帧控制波形显示8、vivado工程9、上板调试验证10、福利&#xff1a;工程源码获取1、AD9708芯片解读和电路设计 AD9708…

85024A是德科技keysight高频探头

附加功能&#xff1a; 易于执行在线测量出色的频率响应和单位增益探头灵敏度高低失真度规格输入电容&#xff08;在 500 MHz 时&#xff09;&#xff1a;< 0.7pF&#xff08;标称值&#xff09;输入电阻&#xff1a;1 MΩ&#xff08;标称值&#xff09;带宽&#xff1a;30…

2月8日刷题总结

写题一点思路也没有&#xff0c;题解也不能看得很懂。所以系统性的学习DP ing……跟着进度来&#xff0c;因此刷了一些已经刷过的类型的题&#xff08;也算再次熟悉一下&#xff09;P1077 [NOIP2012 普及组] 摆花题目描述小明的花店新开张&#xff0c;为了吸引顾客&#xff0c;…

力扣SQL刷题5

目录597. 好友申请 I&#xff1a;总体通过率602. 好友申请 II &#xff1a;谁有最多的好友603. 连续空余座位1045. 买下所有产品的客户597. 好友申请 I&#xff1a;总体通过率 官方讲的题目太繁琐了&#xff0c;大概就是&#xff08;表2中列1列2不全相同的行数&#xff09;/&a…

测试开发之Vue学习笔记-Vue路由

Vue路由18. Vue-路由基础安装 cnpm install --save vue-router官方文档&#xff1a;https://router.vuejs.org/zh/src/main.js中&#xff08;1&#xff09;引入VueRouter&#xff1a;import VueRouter from "vue-router"&#xff08;2&#xff09;使用VueRouter&…

《知行合一王阳明》读书笔记

《知行合一王阳明》用通俗易懂的语言介绍了王阳明一生的传奇经历和他的心学的核心思想。这篇读后感主要介绍一下我对心学的理解。在我看来&#xff0c;心学最本质的要求是“致良知”&#xff0c;最核心的方法论是“知行合一”。致良知是说要遵从自己的本心。王阳明相信人性本善…

(蓝桥杯 刷题全集)【备战(蓝桥杯)算法竞赛-第1天(基础算法-上 专题)】( 从头开始重新做题,记录备战竞赛路上的每一道题 )距离蓝桥杯还有75天

&#x1f3c6;&#x1f3c6;&#x1f3c6;&#x1f3c6;&#x1f3c6;&#x1f3c6;&#x1f3c6; 欢迎观看我的博客&#xff0c;如有问题交流&#xff0c;欢迎评论区留言&#xff0c;一定尽快回复&#xff01;&#xff08;大家可以去看我的专栏&#xff0c;是所有文章的目录&a…

兔年新佳绩,思迈特软件获奖喜讯纷至沓来

近年来&#xff0c;随着大数据、云计算、人工智能、5G等技术加速创新&#xff0c;越来越多的ToB企业开始下沉探索边际&#xff0c;纵深业务服务场景&#xff0c;通过技术与行业的深度融合&#xff0c;为客户提供全面的转型服务&#xff0c;尽一切可能创造客户价值和商业价值。思…

【C++: list的模拟实现】

目录 1 list的简单回顾 2 类中成员变量的声明 3 __list_iterator 中运算符重载 4 list中的迭代器 5 list中增删查改以及clear 6 const迭代器 6.1 __list_iterator的重新实现 6.2 list类的巧妙修改 7 构造函数&&拷贝构造&&赋值运算符重载 8 反向迭代器…

金三银四丨黑蛋老师带你剖析-二进制漏洞

作者&#xff1a;黑蛋二进制漏洞岗上篇文章我们初步了解了一下简历投递方式以及二进制方向相关逆向岗位的要求&#xff0c;今天我们就来看看二进制漏洞相关的岗位&#xff0c;当然&#xff0c;漏洞岗位除了分不同平台&#xff0c;也有漏洞挖掘岗和漏洞分析利用岗。同样&#xf…

[人工智能-综述-11]:ChatGPT, 通用人工智能还是要来了

该来的还是要来的&#xff01;补充信息&#xff1a;ChatGPT是由人工智能研究实验室OpenAI在2022年11月30日发布的全新聊天机器人模型&#xff0c;一款人工智能技术驱动的自然语言处理工具。它能够通过学习和理解人类的语言来进行对话&#xff0c;还能根据聊天的上下文进行互动&…

C语言共用体(C语言union用法)详解

我们知道结构体&#xff08;Struct&#xff09;是一种构造类型或复杂类型&#xff0c;它可以包含多个类型不同的成员。在C语言中&#xff0c;还有另外一种和结构体非常类似的语法&#xff0c;叫做共用体&#xff08;Union&#xff09;&#xff0c;它的定义格式为&#xff1a;un…