排序算法(python)

排序算法

冒泡排序

一次比较相邻的两个数,每轮之后末尾的数字是确定的。

  • 时间复杂度为 O ( n 2 ) O(n^2) O(n2),空间复杂度为 O ( 1 ) O(1) O(1),稳定。
def BUB(nums):for i in range(len(nums)):count = 0for j in range(len(nums)-i-1):if nums[j] > nums[j+1]:nums[j], nums[j+1] = nums[j+1], nums[j]count += 1# count是为了记录该轮是否有修改的,若没有修改,则说明当前数组已经满足条件,不需要再进行交换了。if count == 0:breakreturn nums

选择排序

选择排序是每轮在剩余的元素中,找到最小的元素交换位置。

  • 时间复杂度为 O ( n 2 ) O(n^2) O(n2),空间复杂度为 O ( 1 ) O(1) O(1),不稳定。
def selection(nums):for i in range(len(nums)-1):for j in range(i+1, len(nums)):if nums[i] > nums[j]:nums[i], nums[j] = nums[j], nums[i]return nums

插入排序

插入排序是默认前面的序列是有序的,然后将后面的每个数字依次与前面有序的序列进行比较

  • 时间复杂度为 O ( n 2 ) O(n^2) O(n2),空间复杂度为 O ( 1 ) O(1) O(1),稳定。
def insertSort(nums):for i in range(len(nums)-1):for j in range(i+1, 0, -1):if nums[j] < nums[j-1]:nums[j], nums[j-1] = nums[j-1], nums[j]else:breakreturn nums

希尔排序

希尔排序是对插入排序的优化,它选择了一个增量(len(nums)//2),然后按照这个增量选取等差数列,每轮对每个等差数列进行排序,然后将增量缩小,重复进行排列,直到增量缩小为1。

  • 时间复杂度为 O ( n l o g 2 n ) O(nlog_2^n) O(nlog2n),空间复杂度为 O ( 1 ) O(1) O(1),稳定。
def xier(nums):l = len(nums)gap = l//2while gap>0:for i in range(gap, l):temp = nums[i]j = i# j-gap就相当于等差数列进行排序比较while j-gap>0 and temp < nums[j-gap]:nums[j] = nums[j-gap]j = j-gapnums[j]=tempgap-=1return nums

归并排序

合并两个已经排好序的序列以得到结果。是一个递归的过程。

  • 时间复杂度为 O ( n l o g n ) O(nlogn) O(nlogn),空间复杂度为 O ( n ) O(n) O(n),稳定。
# 合并两个有序的数组
def merge_two(s1,s2,s):i, j = 0, 0while (i+j) < len(s):# j==len(s2)时说明s2走完了,或者s1没走完并且s1中该位置是最小的if j==len(s2) or (i<len(s1) and s1[i] < s2[j]):s[i+j] = s1[i]i += 1else:s[i+j] = s2[j]j += 1
def merge(s):l = len(s)if l<2:returnmid = l//2s1 = s[0:mid]s2 = s[mid:l]merge(s1)merge(s2)merge_two(s1, s2, s)

快速排序

快速排序需要一个基准元素,以及左右两个指针l,r,首先从右端元素开始与基准元素进行比较,找到比基准元素小的数字,放到左端,然后从左端开始寻找比右端大的元素放到r的位置。一轮之后,基准元素左端都是比基准元素小的,右端都是比基准元素大的。然后再依次遍历基准元素左边和右边的序列。

  • 时间复杂度为 O ( n l o g n ) O(nlogn) O(nlogn),空间复杂度为 O ( 1 ) O(1) O(1),不稳定。
def quick_sort(nums, start, end):if start >= end:returnpivot = nums[start]l, r = start, endwhile l<r:while l<r and nums[r] > pivot:r-=1nums[l] = nums[r]while l<r and nums[l] < pivot:l+=1nums[r] = nums[l]nums[l] = pivotquick_sort(nums, start, l)quick_sort(nums, l+1, end)

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

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

相关文章

教育课堂小程序,三分钟打造专属小程序 带完整搭建教程

大家好哇&#xff0c;今天来给大家分享一款教育课堂小程序。现如今&#xff0c;线上教育已经普及&#xff0c;在大学课堂里&#xff0c;老师尝尝是使用各种各样的学习APP进行点名&#xff0c;签到&#xff0c;答题&#xff0c;考试等等&#xff0c;相较于传统的APP来说&#xf…

oracle11g安装图解

软件需求 1.安装CentOS6.5的服务器一台 2.Oracle 11g 安装介质: linux.x64_11gR2_database_1of2.zip linux.x64_11gR2_database_2of2.zip 3.命令行客户端工具xshell、crt或者putty 4.图形界面客户端工具Xming 系统配置检查 1.内存检查 grep MemTotal /proc/m…

dubbogo-1 基础rpc服务

文章目录 基本环境处理编译pb接口开启rpc调用业务观察qa1 能取出protoc里面的字段值吗&#xff1f; 基本环境处理 https://cn.dubbo.apache.org/zh-cn/overview/quickstart/go/install/ 这里没有 protoc-gen-go --version 执行 go get -u github.com/golang/protobuf/protoc…

微信小程序多个按钮点击互不影响禁用实现

这段代码主要实现的是当有多个按钮时,需要改变按钮的内容,比如点击第一个按钮,按钮禁用并内容改为五秒后可点击,但此时不影响第二个按钮点击,每个按钮都是可以禁用5秒后再点击,就是互不影响 Page({data: {buttonStates: {}, // 用于存储按钮的状态},onButtonClick: function (e…

竞赛选题 深度学习乳腺癌分类

文章目录 1 前言2 前言3 数据集3.1 良性样本3.2 病变样本 4 开发环境5 代码实现5.1 实现流程5.2 部分代码实现5.2.1 导入库5.2.2 图像加载5.2.3 标记5.2.4 分组5.2.5 构建模型训练 6 分析指标6.1 精度&#xff0c;召回率和F1度量6.2 混淆矩阵 7 结果和结论8 最后 1 前言 &…

基于vue3+ts5+vue-router4+pinia2的PC端项目搭建教程

导语&#xff1a;在日常开发中&#xff0c;有时候会在项目中引入 ts 来解决一些 js 的问题&#xff0c;下面就简单介绍一下如何使用 vue3tsrouterpinia 来搭建一个项目。 目录 简介创建安装配置实战 简介 vue3 目前是常用的 vue 版本&#xff0c;提供了组合式 API 以及一些新…

Modbus网关实现设备之间的相互通信和数据共享

随着工业自动化的不断发展&#xff0c;Modbus协议在工业控制系统中得到了广泛应用。而Modbus网关&#xff0c;作为连接Modbus设备的桥梁&#xff0c;也成为了工业自动化领域中不可或缺的一部分&#xff0c;是连接不同设备、实现数据传输的关键组件。Modbus网关能够将不同设备的…

Windows 事件日志监控

Windows 事件日志是记录 Microsoft 系统上发生的所有活动的文件&#xff0c;在 Windows 环境中&#xff0c;将记录系统上托管的系统、安全性和应用程序的事件&#xff0c;事件日志提供包含有关事件的详细信息&#xff0c;包括日期、时间、事件 ID、源、事件类型和发起它的用户。…

拭目以待!万博智云亮相2023长沙·中国1024程序员节

2023年10月23 - 25日&#xff0c;第四届“长沙中国 1024 程序员节”将在中国长沙盛大举行&#xff0c;万博智云 OneProCloud将以大会钻石合作伙伴身份重磅亮相&#xff0c;CEO Michael将发表主题演讲。这也是万博智云首次成为长沙中国 1024 程序员节合作伙伴。 1.主题演讲 万博…

Qt/C++开源作品45-CPU内存显示控件/和任务管理器一致

一、前言 在很多软件上&#xff0c;会在某个部位显示一个部件&#xff0c;专门显示当前的CPU使用率以及内存占用&#xff0c;方便用户判断当前程序或者当前环境中是否还有剩余的CPU和内存留给程序使用&#xff0c;在不用打开任务管理器或者资源查看器的时候直接得知当前系统的…

求最大公约数的几种常见的方法 【详解】

目录 一、关于公约数 二、计算最大公约数的方法 1. 辗转相除法&#xff08;欧几里得算法&#xff09; 2. 更相减损法&#xff08;辗转相减法&#xff09; 3. 分解质因数法 4. 穷举法 5. 递归法 6. 短除法 三、总结 一、关于公约数 首先 &#xff0c;先介绍一下公约…

SVN一直报错Error running context: 由于目标计算机积极拒绝,无法连接。解决办法【杭州多测师_王sir】...

一、发现SVN一直报错Error running context: 由于目标计算机积极拒绝&#xff0c;无法连接。 二、没有启动 VisualSVN Server。cmd--> services.msc打开本地服务。查看VisualSVN的三个服务的启动类型&#xff0c;建议选择“手动”&#xff0c;不能选择“禁用”&#xff0c;选…

C++设计模式_09_Abstract Factory 抽象工厂

与上篇介绍的Factory Method工厂方法模式一样&#xff0c;Abstract Factory 抽象工厂模式也属于典型的“对象创建模式”模式&#xff0c;解决的问题也极其相似&#xff0c;在理解了Factory Method工厂方法模式的基础上再去理解Abstract Factory 抽象工厂模式就会变得更加容易。…

docker容器健康状态健康脚本

代码&#xff1a; #!/bin/bash# 定义要监控的容器名称 container_name"mysql-container"# 使用Docker命令来检查容器的运行状态 container_status$(docker inspect --format"{{.State.Status}}" "$container_name")# 检查容器状态并进行相应操作…

工具 | macOS 最简方式安装 adb 工具 | Mac

工具 | macOS 最简方式安装 adb 工具 | Mac 介绍 ADB&#xff08;Android Debug Bridge&#xff09;是 Android开发工具包&#xff08;SDK&#xff09;中的一项实用工具&#xff0c;用于与 Android 设备进行通信和调试。 在 macOS 操作系统上安装 ADB 环境可以帮助开发人员与…

SQLAlchemy学习-12.查询之 order_by 按desc 降序排序

前言 sqlalchemy的query默认是按id升序进行排序的&#xff0c;当我们需要按某个字段降序排序&#xff0c;就需要用到 order_by。 order_by 排序 默认情况下 sqlalchemy 的 query 默认是按 id 升序进行排序的 res session.query(Project).all() print(res) # [<Project…

uniapp实现简单的九宫格抽奖(附源码)

效果展示 uniapp实现大转盘抽奖 实现步骤&#xff1a; 1.该页面可设置8个奖品&#xff0c;每个奖品可设置中奖机会的权重&#xff0c;如下chance越大&#xff0c;中奖概率越高&#xff08;大于0&#xff09; // 示例代码 prizeList: [{id: 1,image: "https://img.alicdn…

vue3中的watchEffect

watch&#xff1a;既要指明监听的属性&#xff0c;也要指明监听的回调。 watchEffect&#xff1a;不需要知名监听哪个属性&#xff0c;监听回调中用到哪个属性&#xff0c;就监听哪个属性。 watchEffect与computed&#xff1a; computed 注重计算出来的值&#xff08;回调函数…

如何注册微信小程序

如何注册微信小程序 前言 因为最近沉迷和朋友们一起下班去打麻将&#xff0c;他们推荐了一个计分的小程序&#xff0c;就不需要每局都转账或者用扑克牌记录了&#xff0c;但是这个小程序不仅打开有广告&#xff0c;各个页面都植入了广告&#xff0c;用起来十分不适。 于是我…

【Cisco】解决小米手机无法连接WIFI的问题

问题来源&#xff1a;领导的小米Note7旧手机无法连接到公司的wifi上&#xff0c;确定密码什么的都没有问题。 无线环境&#xff1a; Cisco Catalyst 9800-L Wireless Controller Cisco Catalyst 9115 AP 可能原因&#xff1a;可能是Cisco 9100系列 AP 和 Android 10设备&#…