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

1- 十大排序算法(选择排序、冒泡排序、插入排序)

1- 十大排序算法(选择排序、冒泡排序、插入排序)

一、选择排序

  • 选择排序:一共执行n-1轮操作;第i轮找到第i小的数;放到第i个位置;计算量0(n2)

  • 找最小的数, 放在最左侧第1个位置

    在这里插入图片描述

  • 找第2小的数,放在第2个位置

在这里插入图片描述

  • 以此类推,找第n大的数,放在第n个位置。
def selection_sort():# 使用全局变量 a 和 nglobal a, n# 外层循环:遍历每个元素,确定当前位置的最小值for i in range(n - 1):m = i  						# 假设当前位置 i 是最小值的位置# 内层循环:从当前位置的下一个元素开始遍历,寻找最小值for j in range(i + 1, n):if a[j] < a[m]:  		# 如果找到了比当前位置 m 更小的元素m = j        		# 更新最小值的位置为 j# 交换当前位置和最小值位置的元素a[i], a[m] = a[m], a[i]# 读取输入的数值个数 n 和元素列表 a
n = int(input())  					 # 读取列表的大小
a = list(map(int, input().split()))  # 读取列表元素
selection_sort()  					 # 调用选择排序函数
print(*a)  		 					 # 打印排序后的列表

二、冒泡排序

  • 选择排序:共n-1轮冒泡;每一轮冒泡:把这轮的最大值放到a[i-1];计算量0(n2)

  • 第一轮冒泡:比较a[0]和a[1],如果a[0]>a[1],交换。前2个数中的大数放到了第2个位置.

    在这里插入图片描述

  • 比较a[1]和a[2],如果a[1]>a[2],交换。把前3个数中的最大数放到了第3个位置。

在这里插入图片描述

def bubble_sort(arr):n = len(arr)  				   # 获取列表的长度# 外层循环,控制排序的趟数,每一趟会将一个最大值放到最后for i in range(n):# 内层循环,用于在每一趟中比较相邻的元素for j in range(0, n-i-1):  # 每次比较到倒数第 i 个元素,因为最后的 i 个元素已经排好# 如果前一个元素大于后一个元素,则交换它们if arr[j] > arr[j+1]:arr[j], arr[j+1] = arr[j+1], arr[j]  # 交换相邻元素return arr  				   # 返回排序后的列表# 输入一个数字列表
arr = list(map(int, input("请输入数字,用空格分隔:").split()))
sorted_arr = bubble_sort(arr)  	    # 调用冒泡排序函数
print("排序后的列表:", sorted_arr)   # 输出排序后的列表

三、插入排序(可以理解成打牌)

  • 插入排序:在一个有序数列上,逐个新增数据,当新增一个数x时,把它插入到有序数列中的合适位置,使
    数列仍保持有序。插n次,每次可能调整0(n)个数计算量0(n2)

  • 以{3,7.4,5,6,1,8, 2}为例。

    • 从第一个数a[0]开始。

      在这里插入图片描述

    • 新增a[1],把它插到有序数列{a[0]}中。

      在这里插入图片描述

    • 新增a[2],把它插到有序数列{a[0],a[1]}中。

      在这里插入图片描述

def insertion_sort(arr):# 从第二个元素开始,假设第一个元素已经排好for i in range(1, len(arr)):key = arr[i]  	# 保存当前要插入的元素j = i - 1  		# 从当前元素的前一个元素开始,准备查找插入位置# 移动元素,直到找到插入的位置while j >= 0 and arr[j] > key:arr[j + 1] = arr[j]  	# 把比key大的元素向右移动j -= 1  				# 继续向前查找arr[j + 1] = key  			# 插入当前元素到正确的位置# 输入一个数字列表
arr = list(map(int, input("请输入数字,用空格分隔:").split()))
insertion_sort(arr)  				# 调用插入排序函数
print("排序后的列表:", arr)  			# 输出排序后的列表

http://www.dtcms.com/a/402969.html

相关文章:

  • uniapp x 鸿蒙开发之调试证书签名配置
  • RabbitMQ-消息堆积
  • uniapp x鸿蒙开发之运行到鸿蒙模拟器
  • wordpress建站 外贸适合做装饰公司的名字
  • Web3实操:2025年DePIN 挂机项目要点分享
  • 公司做网站费用wordpress alchem
  • 内存对齐与变量/结构体分析
  • 常见开发语言在 Windows 上的默认编码格式
  • 卫朋:AI硬件产品怎么做?——雷达模块选型实操
  • 从另一个视角看Transformer:注意力机制就是可微分的k-NN算法
  • [优选算法专题三.二分查找——NO.21山脉数组的峰顶索引]
  • 湖南营销型网站建设推广如何更改网站标题
  • 云原生网络基础设施的核心组件Envoy
  • KubeSphere 社区版即将发布:开启云原生新篇章
  • K8s学习笔记(五) Velero结合minnio业务数据备份与恢复
  • 23种设计模式——组合模式(Composite Pattern)
  • 培训机构网站开发汉中杨海明
  • 2- 十大排序算法(希尔排序、计数排序、桶排序)
  • 哈尔滨服务器托管优选-青蛙云
  • 【MySQL】JDBC
  • sogoupinyin输入法,LINUX版输入中文不显示中文
  • 自动化运维工具 Ansible:集中化管理服务器完全指南
  • 电影网站的建设目标做网站的公司简称什么行业
  • 【ThreeJs】【HTML载入】Three.js 中的 CSS2DRenderer 与 CSS3DRenderer 全面解析
  • (50)elasticsearch服务部署-有状态负载(华为云平台CCE)
  • 【时序预测-5】FFT、STL、ARIMA频域特征和时序分解
  • Kotlinx Serialization 指南
  • SpringBoot @Scheduled 注解详解
  • layui 表格行级 upload 上传操作
  • 【Unity 入门教程】三、如何设置自定义字体(解决中文乱码问题)