LQB(1)-python-各种基础排序
前言
除了内置的快速排序sort(),python也可以实现冒泡排序、选择排序、插入排序、快速排序、归并排序和桶排序。
一、冒泡排序 (Bubble Sort)
基础代码
def bubble_sort(arr):n = len(arr)for i in range(n):swapped = False # 优化:若本轮无交换则提前终止for j in range(n-i-1):if arr[j] > arr[j+1]:arr[j], arr[j+1] = arr[j+1], arr[j]swapped = Trueif not swapped:breakreturn arr
核心知识点
-
原理:相邻元素两两比较,将较大元素逐渐"冒泡"到右侧。(每次循环都选出本循环最大的排后面)
-
时间复杂度:
-
最优:O(n)(已有序时)
-
最差:O(n²)
-
-
稳定性:稳定(相等元素不交换)
-
适用场景:小规模数据或教学演示
二、选择排序 (Selection Sort)
基础代码
def selection_sort(arr):n = len(arr)for i in range(n):min_idx = i # 记录最小元素索引for j in range(i+1, n):if arr[j] < arr[min_idx]:min_idx = jarr[i], arr[min_idx] = arr[min_idx], arr[i] # 交换位置return arr
核心知识点
-
原理:每次从未排序部分选择最小元素,与未排序部分的起始位置交换。
-
时间复杂度:始终为 O(n²)
-
稳定性:不稳定(交换可能破坏顺序)
-
适用场景:简单实现,但效率低,一般仅用于教学
三、插入排序 (Insertion Sort)
基础代码
def insertion_sort(arr):for i in range(1, len(arr)):key = arr[i] # 当前待插入元素j = i-1while j >=0 and key < arr[j]:arr[j+1] = arr[j] # 后移元素j -= 1arr[j+1] = key # 插入正确位置return arr
核心知识点
-
原理:将未排序元素逐个插入已排序序列的正确位置。
-
时间复杂度:
-
最优:O(n)(已有序时)
-
最差:O(n²)
-
-
稳定性:稳定
-
适用场景:小规模数据或近乎有序的数据
四、快速排序 (Quick Sort)
基础代码
def quick_sort(arr):if len(arr) <= 1:return arrpivot = arr[len(arr)//2] # 选择中间元素为基准值left = [x for x in arr if x < pivot]middle = [x for x in arr if x == pivot]right = [x for x in arr if x > pivot]return quick_sort(left) + middle + quick_sort(right)
核心知识点
-
原理:分治法 + 递归,选择一个基准值将数组分为三部分(小于、等于、大于基准值)。
-
时间复杂度:
-
平均:O(n log n)
-
最差:O(n²)(当基准值选择不当时)
-
-
稳定性:不稳定
-
优化点:三数取中法选择基准值、尾递归优化
-
适用场景:大规模随机数据(实际应用最广泛的排序算法)
五、归并排序 (Merge Sort)
基础代码
def merge_sort(arr):if len(arr) <= 1:return arrmid = len(arr) // 2left = merge_sort(arr[:mid])right = merge_sort(arr[mid:])return merge(left, right)def merge(left, right):result = []i = j = 0while i < len(left) and j < len(right):if left[i] < right[j]:result.append(left[i])i += 1else:result.append(right[j])j += 1result.extend(left[i:])result.extend(right[j:])return result
核心知识点
-
原理:分治法,将数组递归拆分为两半,排序后合并。
-
时间复杂度:始终 O(n log n)
-
空间复杂度:O(n)(合并时需要额外空间)
-
稳定性:稳定
-
适用场景:需要稳定排序且内存充足时(如数据库排序)
六、桶排序 (Bucket Sort)
基础代码
def bucket_sort(arr, bucket_size=5):if len(arr) == 0:return arrmin_val, max_val = min(arr), max(arr)bucket_count = (max_val - min_val) // bucket_size + 1buckets = [[] for _ in range(bucket_count)]for num in arr:buckets[(num - min_val) // bucket_size].append(num)result = []for bucket in buckets:result.extend(sorted(bucket)) # 每个桶使用其他排序算法return result
核心知识点
-
原理:将数据分到有限数量的桶中,每个桶单独排序后合并。
-
时间复杂度:
-
平均:O(n + k)(k为桶数量)
-
最差:O(n²)(所有元素集中在一个桶时)
-
-
稳定性:取决于桶内排序算法的稳定性
-
适用场景:数据分布均匀且范围已知(如年龄排序)
对比
| 算法 | 时间复杂度(平均) | 稳定性 | 空间复杂度 | 适用场景 |
|---|---|---|---|---|
| 冒泡排序 | O(n²) | 稳定 | O(1) | 教学演示 |
| 选择排序 | O(n²) | 不稳定 | O(1) | 简单实现 |
| 插入排序 | O(n²) | 稳定 | O(1) | 小规模或近乎有序数据 |
| 快速排序 | O(n log n) | 不稳定 | O(log n) | 大规模随机数据 |
| 归并排序 | O(n log n) | 稳定 | O(n) | 需要稳定排序且内存充足 |
| 桶排序 | O(n + k) | 稳定 | O(n + k) | 数据分布均匀且范围已知 |
使用
-
优先选择快速排序(Python内置的
sorted(),使用了 Timsort 算法,结合了归并排序和插入排序)。 -
对小规模数据(如 n < 100)可考虑插入排序。
-
需要稳定排序时选择归并排序。
相关文章:
LQB(1)-python-各种基础排序
前言 除了内置的快速排序sort(),python也可以实现冒泡排序、选择排序、插入排序、快速排序、归并排序和桶排序。 一、冒泡排序 (Bubble Sort) 基础代码 def bubble_sort(arr):n len(arr)for i in range(n):swapped False # 优化:若本轮无交换则提前…...
解锁国内主流前端与后端框架
前端框架大揭秘 在当今的 Web 开发领域,前端框架的地位愈发举足轻重。随着用户对 Web 应用交互性和体验性要求的不断攀升,前端开发不再仅仅是简单的页面布局与样式设计,更需要构建复杂且高效的用户界面。前端框架就像是一位得力助手…...
使用OBS推流,srs服务器播放
说明: ffmpeg可以推流,但是是命令行方式不太友好,还可以使用主流的OBS开源推流软件,可从官网Open Broadcaster Software | OBS 下载最新版本,目前很多网络主播都是用它做直播。该软件支持本地视频文件以及摄像头推流。…...
【鸿蒙HarmonyOS Next实战开发】多媒体视频播放-ijkplayer
简介 ijkplayer是OpenHarmony和HarmonyOS环境下可用的一款基于FFmpeg的视频播放器。 演示 下载安装 ohpm install ohos/ijkplayer使用说明 import { IjkMediaPlayer } from "ohos/ijkplayer";import type { OnPreparedListener } from "ohos/ijkplayer";i…...
GRU 和 LSTM 公式推导与矩阵变换过程图解
GRU 和 LSTM 公式推导与矩阵变换过程图解 GRULSTM 本文的前置篇链接: 单向/双向,单层/多层RNN输入输出维度问题一次性解决 GRU GRU(Gate Recurrent Unit)是循环神经网络(RNN)的一种,可以解决RNN中不能长期…...
现在中国三大运营商各自使用的哪些band频段
现在中国三大运营商4G和5G频段分配情况: 中国移动 4G频段: TD-LTE: Band 39:1880-1920MHz,实际使用1885-1915MHz。 Band 40:2300-2400MHz,实际使用2320-2370MHz。 Band 41:2515-26…...
使用Jenkins实现鸿蒙HAR应用的自动化构建打包
使用Jenkins实现鸿蒙HAR应用的自动化构建打包 在软件开发领域,自动化构建是提高开发效率和确保代码质量的重要手段。特别是在鸿蒙(OpenHarmony)应用开发中,自动化构建更是不可或缺。本文将详细介绍如何使用Jenkins命令行工具实现…...
AI时代,职场人如何开启学习之旅
为什么要学习 AI 在当今数字化时代,AI 正以前所未有的速度改变着我们的工作和生活方式。从智能客服到自动化生产,从数据分析到个性化推荐,AI 已经广泛渗透到各个行业和领域。学习 AI,对于工作人员来说,不仅是提升工作…...
MIT6.824 Lecture 2-RPC and Threads Lecture 3-GFS
Lecture 2-RPC and Threads Go语言在多线程、同步,还有很好用的RPC包 《Effective Go》 线程是实现并发的重要工具 在分布式系统里关注多线程的原因: I/O concurrencyParallelismConvenience Thread challenges 用锁解决race问题 Coordination channel…...
MySQL第五次作业
根据图片内容完成作业 1.建表 (1)建立两个表:goods(商品表)、orders(订单表) mysql> create table goods( -> gid char(8) primary key, -> name varchar(10), -> price decimal(8,2), -> num int); mysql> create t…...
【PDF提取内容】如何批量提取PDF里面的文字内容,把内容到处表格或者批量给PDF文件改名,基于C++的实现方案和步骤
以下分别介绍基于 C 批量提取 PDF 里文字内容并导出到表格,以及批量给 PDF 文件改名的实现方案、步骤和应用场景。 批量提取 PDF 文字内容并导出到表格 应用场景 文档数据整理:在处理大量学术论文、报告等 PDF 文档时,需要提取其中的关键信…...
智慧机房解决方案(文末联系,领取整套资料,可做论文)
智慧机房解决方案-软件部分 一、方案概述 本智慧机房解决方案旨在通过硬件设备与软件系统的深度整合,实现机房的智能化管理与服务,提升机房管理人员的工作效率,优化机房运营效率,确保机房设备的安全稳定运行。软件部分包括机房管…...
【C编程问题集中营】使用数组指针时容易踩得坑
【C编程问题集中营】使用数组指针时容易踩得坑 文章目录 【C编程问题集中营】使用数组指针时容易踩得坑一、获取数组首地址二、应用场景举例2.1 正常场景2.2 异常场景 三、总结 一、获取数组首地址 一维数组的首地址即数组第一个元素的指针,常用的获取一维数组首地…...
【Redis】Linux、Windows、Docker 环境下部署 Redis
一、Linux环境部署Redis 1、卸载 # 查看 Redis 是否还在运行 [appuserlocalhost redis]$ ps -ef|grep redis appuser 135694 125912 0 14:24 pts/1 00:00:00 ./bin/redis-server *:6379 appuser 135731 125912 0 14:24 pts/1 00:00:00 grep --colorauto redis# 停止…...
反函数定义及其推导
文章目录 定义存在条件举例说明总结 反函数是数学中一种特殊的函数,用于“逆转”另一个函数的映射关系。 定义 设有一个函数 f : X → Y f: X \to Y f:X→Y。如果存在一个函数 g : Y → X g: Y \to X g:Y→X,使得对于所有 x ∈ X x \in X x∈X 和 y…...
2025.2.9机器学习笔记:PINN文献阅读
2025.2.9周报 文献阅读题目信息摘要Abstract创新点网络架构实验结论缺点以及后续展望 文献阅读 题目信息 题目: GPT-PINN:Generative Pre-Trained Physics-Informed Neural Networks toward non-intrusive Meta-learning of parametric PDEs期刊: Fini…...
Oracle数据连接 Dblink
拓展: oracle远程登陆数据库 1.oracle客户端或者服务端 2.修改你的电脑如下路径文件(服务器IP,服务器的数据库名,服务器的数据库端口号) c:\oracle\product\10.2.0\db_1\NETWORK\ADMIN\tnsnames.ora orcl_109 (DESCRIPTION …...
fetch请求总结,fastadmin中后台接口强制返回json数据
fetch请求 提交图片,只支持formData方式,这样会自动变为multiform方式,而且一般的post大多都可以用这样的方式来完成请求 const formData new FormData(); formData.append(file, fileInput.files[0]); formData.append(pid, id); formData.append(dc, 1);fetch(/api/common…...
基于STM32的智能鱼缸水质净化系统设计
🤞🤞大家好,这里是5132单片机毕设设计项目分享,今天给大家分享的是智能鱼缸水质净化系统。 目录 1、设计要求 2、系统功能 3、演示视频和实物 4、系统设计框图 5、软件设计流程图 6、原理图 7、主程序 8、总结 1、设计要求…...
JAVA安全—FastJson反序列化利用链跟踪autoType绕过
前言 FastJson这个漏洞我们之前讲过了,今天主要是对它的链条进行分析一下,明白链条的构造原理。 Java安全—log4j日志&FastJson序列化&JNDI注入_log4j漏洞-CSDN博客 漏洞版本 1.2.24及以下没有对序列化的类做校验,导致漏洞产生 1.2.25-1.2.41增加了黑名单限制,…...
机器学习赋能6G近场通信:从信道估计到波束赋形的智能革命
1. 项目概述:当6G遇见近场,为何机器学习成为破局关键?如果你关注过5G到6G的技术演进路线,会发现一个核心趋势:天线阵列的规模正在从“大规模”走向“极大规模”。这不仅仅是数量的堆砌,更是通信物理原理的一…...
Godot中型项目工程化实践:目录规范、资源引用与状态管理
1. 这不是续集,而是项目落地的分水岭“Godot 游戏引擎项目(二)”——看到这个标题,很多人第一反应是:“哦,上一篇讲了环境搭建和Hello World,这篇该讲节点树和信号了?”但我在带三个…...
2026年LLM推理加速全景:量化、投机解码与KV Cache工程实战
大语言模型推理速度慢、成本高,是阻碍AI大规模落地的核心障碍之一。一个7B参数的模型,在标准配置下每秒只能生成约30个token,对于需要实时响应的应用来说几乎无法接受。但2026年,一系列推理加速技术的成熟,让这一局面发…...
METSO A413248自动化系统
METSO A413248 自动化系统模块产品特点: 品牌归属:芬兰METSO(美卓)工业自动化系统原装备件。 产品类型:工业级自动化控制模块/接口模块。 核心功能:用于控制信号处理、数据采集及系统集成。 系统兼容&am…...
文件-语言-系统:基础IO-2.0——IO重定向接口,语言层缓冲区,系统级缓冲区。内核级分析!
bit::Shadow✧(≖ ◡ ≖✿ 目录 重定向接口dup2() ">" ">>" "<" 函数原型 输出重定向1和2的使用 文件描述符表 ./a.out运行: "./a.out >"默认重定向是fd 1 合并标准输入输出 缓冲区 什么是缓冲…...
【深度解析】AI Coding 模型竞速:从 Claude Mythos 安全编码到 GPT-5.6 传闻,如何落地代码审查智能体
摘要 AI 编码模型正在从“代码补全”进入“复杂代码库理解、漏洞发现与自动修复”阶段。本文结合 Claude Mythos、Claude Opus 4.8 与 GPT-5.6 相关信息,解析新一代 Coding Agent 的技术趋势,并给出基于大模型 API 的代码安全审查实战方案。背景介绍&…...
双稳健机器学习:用正交性与交叉拟合解决因果推断中的ML偏差
1. 项目概述:当机器学习遇见因果推断的“干扰”难题在实证研究的日常工作中,我们常常面临一个核心矛盾:我们真正关心的,往往只是一个或几个关键参数——比如一项政策对就业率的平均影响(平均处理效应,ATE&a…...
MobX社区资源大全:10个必备工具、插件和扩展库推荐 [特殊字符]
MobX社区资源大全:10个必备工具、插件和扩展库推荐 🚀 【免费下载链接】MobX-Docs-CN MobX 中文文档 项目地址: https://gitcode.com/gh_mirrors/mo/MobX-Docs-CN MobX作为一个简单、可扩展的状态管理库,已经成为React开发者不可或缺的…...
如何用HsMod解锁炉石传说60+项隐藏功能:终极优化指南
如何用HsMod解锁炉石传说60项隐藏功能:终极优化指南 【免费下载链接】HsMod Hearthstone Modification Based on BepInEx 项目地址: https://gitcode.com/GitHub_Trending/hs/HsMod HsMod是一款基于BepInEx开发的炉石传说功能增强插件,为玩家提供…...
别再只用鼠标了!用Leap Motion手势控制Unity游戏,保姆级配置避坑指南(2024版)
2024年Unity手势交互开发实战:Leap Motion从配置到游戏逻辑全解析在游戏开发领域,交互方式的创新往往能带来全新的体验。想象一下,玩家不再需要键盘鼠标,仅凭自然的手部动作就能操控游戏角色——这正是Leap Motion手势识别技术为U…...
