当前位置: 首页 > news >正文

python数据结构和算法(4)

排序算法

  • 所谓排序,是一串记录,按照其中的某个关键字的大小,递增或递减的排列起来的操作
  • 排序算法,就是如何使得记录按照要求排列的方法
  • 排序算法的重要性
    • 在大量数据处理方面,一个优秀的算法可以节省大量的资源
    • 在各个领域中考虑到数据的各种限制和规范,要的到一个符合实际的优秀算法,得经过大量的推理和分析

算法的稳定性

具有相同关键字的记录经过排序后,相对位置保持不变,这样的算法是稳定性算法

  • 不稳定的排序算法:选择排序、快速排序、希尔排序、堆排序
  • 稳定的排序算法:冒泡排序、插入排序、归并排序和基数排序

冒泡排序

冒泡排序是重复的走访要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小,首字母从Z到A)错误,就把它们交换过来,走访元素的工作是重复进行的,直到没有相邻元素需要交换,则说明该元素列已经排序完成。

相邻的两个元,两两进行比较,第1轮比较完毕后,最大的元素,就会处于最大索引处

关注点:

  1. 比较的总轮数
  2. 每轮比较的次数
  3. 哪两个元素进行了比较交换

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

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

总结:5个数字进行排序,共进行了 4 轮,以变量 i 代表轮数,则 i 的取值范围为 0,1,2,3,即range(0,4),如果n个元素进行排序,轮数i的取值范围为range(0,n-1);以变量j 表示每轮比较的索引
第 1 轮 i = 0,进行了 4 次比较,j 的取值范围为 0,1,2,3
第 2 轮 i = 1,进行了 3 次比较,j 的取值范围为 0,1,2
第 3 轮 i = 2,进行了 2 次比较,j 的取值范围为 0,1
第 4 轮 i = 3,进行了 1 次比较,j 的取值范围为 0,1

j的最大取值范围为0,1,2,3,并且逐轮递减,即range(0,n-i-1)

# 冒泡排序
array = [5,3,4,7,2]
n = len(array)
for i in range(0,n - 1):print(i)for j in range(0,n-i-1):if array[j] > array[j+1]:temp = array[j]array[j] = array[j+1]array[j+1] = temp

时间复杂度

最优时间复杂度 O ( n ) O(n) O(n)
最坏时间复杂度 O ( n 2 ) O(n^2) O(n2)

选择排序

从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾,以此类推,直到全部待排序的数据元素的个数为零

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

在这里插入图片描述

array = [5,3,4,7,2]
n = len(array)
for i in range(0,n-1):min_index = ifor j in range(i + 1,n):if array[j] < array[min_index]:min_index = jtemp = array[i]array[i] = array[min_index]array[min_index] = temp
http://www.xdnf.cn/news/981811.html

相关文章:

  • R语言缓释制剂QBD解决方案之三
  • 浅析hashmap
  • 7.7 Extracting and saving responses
  • C# 与低代码平台的融合:以活字格为例的 Web API 开发实践
  • 布尔字段命名陷阱:避免序列化错误的关键
  • pytorch 中前向传播和后向传播的自定义函数
  • vscode界面设置透明度--插件Glasslt-VSC
  • 【DETR目标检测】ISTD-DETR:一种基于DETR与超分辨率技术的红外小目标检测深度学习算法
  • 《HarmonyOSNext弹窗:ComponentContent动态玩转企业级弹窗》
  • 新闻类鸿蒙应用全链路测试实践:性能、兼容性与体验的深度优化
  • React Context 性能问题及解决方案深度解析
  • 【普及/提高−】P1025 ——[NOIP 2001 提高组] 数的划分
  • Cilium动手实验室: 精通之旅---23.Advanced Gateway API Use Cases
  • codeforces C. Devyatkino
  • Java并发工具包
  • 【59 Pandas+Pyecharts | 淘宝华为手机商品数据分析可视化】
  • 深度解读谷歌Brain++液态神经网络:重塑动态智能的流体计算革命
  • Gogs:一款极易搭建的自助 Git 服务
  • [Java恶补day22] 240. 搜索二维矩阵Ⅱ
  • React第六十节 Router中createHashRouter的具体使用详解及案例分析
  • android studio向左向右滑动页面
  • Babylon.js引擎
  • MMDG++:构筑多模态人脸防伪新防线,攻克伪造攻击与场景漂移挑战
  • java面向对象高级部分
  • 大数据服务器和普通服务器之间的区别
  • LDStega论文阅读笔记
  • 【基于阿里云上Ubantu系统部署配置docker】
  • RawTherapee:专业RAW图像处理,免费开源
  • 【AI智能体】Coze 数据库从使用到实战操作详解
  • Docker Compose完整教程