Python 算法基础篇:冒泡排序和选择排序

news2024/10/6 12:24:19

Python 算法基础篇:冒泡排序和选择排序

  • 引言
  • 1. 冒泡排序算法概述
  • 2. 冒泡排序算法实现
    • 实例1:冒泡排序
  • 3. 选择排序算法概述
  • 4. 选择排序算法实现
    • 实例2:选择排序
  • 5. 冒泡排序与选择排序的对比
  • 总结

引言

冒泡排序和选择排序是两种常用的排序算法,用于将一个无序列表按照特定顺序重新排列。本篇博客将介绍冒泡排序和选择排序的基本原理,并通过实例代码演示它们的应用。

😃😄 ❤️ ❤️ ❤️

1. 冒泡排序算法概述

冒泡排序是一种简单的排序算法,它通过比较相邻的元素,并交换它们的位置,从而将较大的元素“冒泡”到列表的末尾。在一次遍历中,冒泡排序会将列表中最大的元素移动到最后一个位置,然后再对剩余的元素进行下一轮遍历。

冒泡排序的主要优点是实现简单易懂,代码量较小。然而,冒泡排序的时间复杂度较高,为 O ( n ^ 2 ),在处理大规模数据时效率较低。

2. 冒泡排序算法实现

实例1:冒泡排序

def bubble_sort(arr):
    n = len(arr)

    # 遍历所有数组元素
    for i in range(n):
        # 标记此次遍历是否有交换发生
        swapped = False

        # 将最大元素“冒泡”到末尾
        for j in range(0, n-i-1):
            if arr[j] > arr[j+1]:
                arr[j], arr[j+1] = arr[j+1], arr[j]
                swapped = True

        # 如果没有交换发生,表示列表已经有序,可以提前结束
        if not swapped:
            break

# 测试冒泡排序
arr = [64, 34, 25, 12, 22, 11, 90]
bubble_sort(arr)
print("冒泡排序结果:", arr)

代码解释:上述代码演示了使用冒泡排序对一个列表进行排序的实例。冒泡排序通过嵌套的循环遍历列表,并将相邻的元素进行比较和交换,将最大的元素逐步“冒泡”到列表的末尾。在每次遍历时,如果没有发生交换,则表示列表已经有序,可以提前结束。

3. 选择排序算法概述

选择排序是一种简单的排序算法,它通过遍历列表找到最小的元素,并将它放在列表的开头。然后再从剩余的未排序元素中继续找到最小的元素,放在已排序元素的末尾。选择排序的主要思想是不断选择最小的元素,放在已排序部分的末尾。

选择排序的优点是实现简单,代码量较小。然而,选择排序的时间复杂度也较高,为 O ( n ^ 2 ),效率相对较低。

4. 选择排序算法实现

实例2:选择排序

def selection_sort(arr):
    n = len(arr)

    # 遍历所有数组元素
    for i in range(n-1):
        # 假设当前元素为最小值的索引
        min_index = i

        # 在剩余未排序元素中找到最小值的索引
        for j in range(i+1, n):
            if arr[j] < arr[min_index]:
                min_index = j

        # 将最小值交换到已排序部分的末尾
        arr[i], arr[min_index] = arr[min_index], arr[i]

# 测试选择排序
arr = [64, 34, 25, 12, 22, 11, 90]
selection_sort(arr)
print("选择排序结果:", arr)

代码解释:上述代码演示了使用选择排序对一个列表进行排序的实例。选择排序通过嵌套的循环遍历列表,找到未排序部分的最小元素,并将它交换到已排序部分的末尾。每次遍历时,都将最小元素交换到合适的位置。

5. 冒泡排序与选择排序的对比

冒泡排序和选择排序是两种简单的排序算法,它们的原理和实现方式略有不同:

  • 冒泡排序是通过相邻元素的比较和交换来将最大的元素逐步“冒泡”到末尾,需要多次遍历列表。在最好的情况下(列表已经有序),冒泡排序的时间复杂度为 O ( n ),在最坏的情况下(列表逆序),时间复杂度为 O ( n ^ 2 )。

  • 选择排序是通过在未排序部分中找到最小的元素,并将它交换到已排序部分的末尾,需要多次遍历列表。选择排序的时间复杂度始终为 O ( n ^ 2 ),不受列表有序程度的影响。

总结

本篇博客介绍了冒泡排序和选择排序两种简单的排序算法。冒泡排序通过相邻元素的比较和交换将最大元素逐步“冒泡”到末尾,而选择排序通过找到最小元素并放在已排序部分的末尾来排序列表。

冒泡排序和选择排序虽然实现简单,但时间复杂度较高,在处理大规模数据时效率相对较低。在实际应用中,更推荐使用更高效的排序算法,如快速排序和归并排序。

[ 专栏推荐 ]
😃 Python 算法初阶:入门篇》😄
❤️【简介】:本课程是针对 Python 初学者设计的算法基础入门课程,涵盖算法概念、时间复杂度、空间复杂度等基础知识。通过实例演示线性搜索、二分搜索等算法,并介绍哈希表、深度优先搜索、广度优先搜索等搜索算法。此课程将为学员提供扎实的 Python 编程基础与算法入门,为解决实际问题打下坚实基础。

在这里插入图片描述

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

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

相关文章

使用java创建图片文字模版

场景:公司员工生日到了,给过生日的同事发送邮件附带图片祝福 以下是生成图片模版的代码 package com.yujie;import java.awt.*; import java.awt.image.BufferedImage; import java.io.File; import javax.imageio.ImageIO;public class ImageMergeExample {public static vo…

第十五 rabbitmq及数据同步

0.学习目标 了解常见的MQ产品 了解RabbitMQ的5种消息模型 会使用Spring AMQP 利用MQ实现搜索和静态页的数据同步 1.RabbitMQ 1.1.搜索与商品服务的问题 目前我们已经完成了商品详情和搜索系统的开发。我们思考一下&#xff0c;是否存在问题&#xff1f; 商品的原始数据保…

C++ 第三讲

1 >手动封装一个顺序栈类(数据元素为整形)&#xff0c;要求私有成员属性:堆区空间的指针&#xff0c;用于存放数据&#xff0c;和一个指向栈顶元素的变量 main.cpp #include "zuoye.h"int main() {//实例化对象My_stack Stck;My_stack &st Stck;//入栈Stck…

【数据结构】手撕排序NO.1----排序初识

目录 一. 前言 二. 排序的概念及运用 2.1 排序的概念 2.2 排序的运用 2.3 常见的排序算法 三. 冒泡and选择排序 3.1 冒泡排序 3.2 选择排序 四. 各大排序算法的复杂度和稳定性 一. 前言 从本期开始&#xff0c;我们的数据结构将迎来一个新的篇章&#xff1a;排序篇&#xff…

【7天学GO】第1章 开发环境

1.1 开篇介绍(必看) A. Why choose the go language B. 学语言阶段 1.2 环境搭建前戏 A. 学习一门语言步骤 B. 编译型与解释型 1.3 mac系统Go开发环境搭建 (略) 1.4 linux系统Go开发环境搭建 (略) 1.5 windows系统Go开发环境搭建 A. 开发环境搭建 Stage 1&#xff1a…

Appium+python自动化(十一)- 元素定位- 下卷超详解)

1、 List定位 List故名思义就是一个列表&#xff0c;在python里面也有list这一个说法&#xff0c;如果你不是很理解什么是list&#xff0c;这里暂且理解为一个数组或者说一个集合。首先一个list是一个集合&#xff0c;那么他的个数也就成了不确定性&#xff0c;所以这里需要用复…

和为 K 的子数组——前缀和+哈希

题目链接&#xff1a;力扣 注意&#xff1a;此题不能使用滑动窗口&#xff0c;因为数组中可能会出现负数。也就是说右指针向后移1位不能保证区间会增大&#xff0c;左指针向后移1位也不能保证区间和会减小。给定左右指针的位置没有二段性 已知sum[i]是从nums[0~i]的和&#x…

STM32之按键驱动的使用和自定义(MultiButton)

原始Github地址 Github地址 修改后 调整内容 将宏定义转换成配置结构体 头文件 #ifndef _MULTI_BUTTON_H_ #define _MULTI_BUTTON_H_#include "stdint.h" #include "string.h"//According to your need to modify the constants. //#define TICKS_IN…

数据结构--图的存储邻接表法

数据结构–图的存储邻接表法 邻接矩阵&#xff1a; 数组实现的顺序存储&#xff0c;空间复杂度高&#xff0c;不适合存储稀疏图 邻接表&#xff1a; 顺序链式存储 邻接表法&#xff08;顺序链式存储&#xff09; //边/弧 typedef struct ArcNode {int adjvex; //边/弧指向哪个…

MVX-Net Multimodal VoxelNet for 3D Object Detection 论文学习

论文链接&#xff1a;MVX-Net Multimodal VoxelNet for 3D Object Detection 1. 解决了什么问题&#xff1f; 2D 目标检测取得了显著成效&#xff0c;但由于输入模态的本质区别&#xff0c;CNN 无法直接应用在 3D 检测任务。LiDAR 能准确地定位到 3D 空间的物体&#xff0c;基…

根据对象数组的key进行分组

简单版&#xff1a; const arr [{key: aaa,tableName: bbbbb},{key: aaa,tableName: bbbbb},{key: www,tableName: bbbbb},{key: www,tableName: bbbbb},{key: mysql_ytr,tableName: bbbbb} ]// 把arr按key進行分組&#xff0c; 輸出結果是對象&#xff0c;對象裡面用key做鍵…

logback自定义调用以及文件输出

1、logback 首先五大日志等级是不可更改的&#xff0c;我们所定义的日志输出和调用也是用的这五大等级&#xff0c;这个就不多说了&#xff0c;没啥用。 2、效果 调用 String msg "测试日志"; MyLoger.myloger(msg); 输出 2023-07-18 10:55:05 [main] INFO m…

[element-ui] el-select,虚拟滚动(vue-virtual-scroll-list)

一、问题描述 表单中某下拉框&#xff0c;由于数据过多&#xff0c;选择的时候会因为数据量过大导致页面卡顿&#xff0c;于是对于el-select进行二次封装&#xff0c;实现虚拟滚动。 二、实现如下&#xff1a; 看起来是加载了全部数据&#xff0c;实际上只加载了自己设定的1…

单例模式类设计|什么是饿汉模式和懒汉模式

前言 那么这里博主先安利一些干货满满的专栏了&#xff01; 首先是博主的高质量博客的汇总&#xff0c;这个专栏里面的博客&#xff0c;都是博主最最用心写的一部分&#xff0c;干货满满&#xff0c;希望对大家有帮助。 高质量干货博客汇总https://blog.csdn.net/yu_cblog/c…

汇编实现1-100累加(ARMv7)

汇编实现1-100累加 代码.text .globl _start _start:mov r0,#0 summationmov r1,#0 autoIncrementbl funadd funadd:cmp r1,#100addccs r0,r1,r0addccs r1,r1,#1mov pc,lr stop:b stop .end运行效果

请问如何用oracle触发器实现不允许新增/删除表/增加/减少/修改字段类型

请问如何用oracle触发器实现不允许新增/删除表/增加/减少/修改字段类型 给本帖投票 56211打赏收藏 分享 转发到动态举报 写回复 性能测试中发现oracle11g数据库每天22点,oralce进程CPU占用率突增>> 11 条回复 切换为时间正序 请发表友善的回复… 发表回复 microsof…

UWB天线设计之一种优化扁平超宽带单极的新方法

文章亮点 一种新颖的方法提出了扁平超宽带单极天线。 通过应用收缩,可以设计具有相同性能的更小的天线作为平面单极天线。 优化结果表明该方法能够设计非常小的天线。 在这项研究中,提出了一种优化扁平超宽带单极天线的新方法。在该方法中,一般性地描述了天线的形状。这种一…

Http 接口测试框架

目录 前言&#xff1a; 实际效果 框架的下一步 最新框架图&#xff08;红色部分未完成&#xff09; 部分代码 你需要做的 前言&#xff1a; 在进行HTTP接口测试时&#xff0c;使用一个可靠的测试框架可以提高测试效率和质量。HTTP接口测试框架是一种用于自动化测试HTTP接…

STM32数字小键盘

基于STM32的数字小键盘 自己的键盘小键盘数字键坏了几个&#xff0c;准备自己用STM32做一个数字键盘。 硬件 找了一些资料&#xff0c;感谢知乎老哥。 原理图 采用的是主控是STM32F103RBT6&#xff0c;上拉1.5K接高速USB。按键采用的是矩阵按键。轴位可以自己选择。还接了一…

OpenCv之图像轮廓

目录 一、图像轮廓定义 二、绘制轮廓 三、计算轮廓面积与周长 一、图像轮廓定义 图像轮廓是具有相同颜色或灰度的连续带你的曲线.轮廓在形状分析和物体的检测和识别中很有用 轮廓的作用: 用于图形分析物体的识别与检测 注意点: 为了检测的准确性&#xff0c;需要先对图像…