首页 > 编程语言 >算法学习笔记二一冒泡排序

算法学习笔记二一冒泡排序

时间:2023-12-14 22:56:39浏览次数:34  
标签:二一 list 交换 range len 算法 冒泡排序 排序

目录

什么是冒泡排序

​对给定数组进行遍历,每次比较相邻两个元素大小,若大的数值在前面则交换两数位置(升序),每完成一趟遍历数组中最大的元素都会上升到数组的末尾,这也是冒泡一词的由来。

算法原理

  1. (升序)列表每相邻的数,如果前面比后面大,则交换这两个数。
  2. 一趟排序完成后,无序区减少一个数,有序区增加一个数。
  3. 再对前面n-1个数值进行相同的遍历,一共完成n-1次遍历就实现了排序完成

代码示例

def bubble_sort(list):
   for i in range(len(list) - 1):  # 第i趟
       for j in range(len(list) - i - 1):
           if list[j + 1] < list[j]: # 升序
               # temp = list[j + 1]
               # list[j + 1] = list[j]
               # list[j] = temp
               list[j], list[j + 1] = list[j + 1], list[j] # python中交换元素写法
       print(list) # 查看每趟比较的结果
   return list

运行上述代码可以发现,若一个数组在规定的i趟排序完成前就以及排好序,为提高运行效率,则不需要进行后面的排序。
此时定义一个布尔变量,定义每趟是否进行了交换操作,若没有交换操作发生,则说明数组提前到达了有序状态。

def bubble_sort(list):
    for i in range(len(list) - 1):  # 第i趟
        exchange = False # 默认没有交换发生
        for j in range(len(list) - i - 1):
            if list[j + 1] < list[j]:
                list[j], list[j + 1] = list[j + 1], list[j]
                exchange = True # 交换操作发生
        if not exchange: # 若每趟排序后没有交换,结束循环
            return
        print(list)
    return list

标签:二一,list,交换,range,len,算法,冒泡排序,排序
From: https://www.cnblogs.com/chase-youth/p/17902377.html

相关文章

  • 基于小波神经网络的网络流量预测算法matlab仿真
    1.算法运行效果图预览   2.算法运行软件版本matlab2022A 3.算法理论概述       网络流量能直接反映网络性能的好坏,网络流量的建模与预测对于大规模网络的规划设计、网络资源管理以及用户行为的调节等方面都具有积极意义。本课题首先介绍了网络流量的特征......
  • 基于FPGA的图像形态学腐蚀算法实现,包括tb测试文件和MATLAB辅助验证
    1.算法运行效果图预览 将FPGA的仿真结果导入到MATLAB,结果如下所示:   2.算法运行软件版本vivado2019.2 matlab2022a 3.算法理论概述      基于FPGA的图像形态学腐蚀算法实现主要依赖于图像处理的基本原理和数学形态学的基础知识。在图像处理中,形态学操......
  • 常见排序算法
    排序常见的简单排序算法I.选择排序选择排序思路:选择出数组中的最小元素,将它与数组的第一个元素交换位置。再从剩下的元素中选择出最小的元素,将它与数组的第二个元素交换位置。不断进行这样的操作,直到将整个数组排序。publicvoidsort(int[]arr){intN=arr.length;......
  • 代码随想录算法训练营第二天| LeetCode977.有序数组的平方、209.长度最小的子数组、59
    LeetCode977.有序数组的平方●今日学习的文章链接和视频链接代码随想录(programmercarl.com) 题目链接977.有序数组的平方-力扣(LeetCode) ●自己看到题目的第一想法昨天正好做了这道题目,总体来说就是用双指针法,要么从绝对值最小的数开始排序,要么从绝对值最大的数开......
  • 算法Day2双指针法排序,滑动窗口,螺旋矩阵
    Day2双指针法排序,滑动窗口,螺旋矩阵ByHQWQF2023/12/14笔记977.有序数组的平方https://leetcode.cn/problems/squares-of-a-sorted-array/返回一个非递减顺序排序的整数数组每个元素的平方后组成的新数组,新数组也按非递减顺序排序。解法:双指针法由于给定数组本身是有序的,......
  • 算法战斗第三天C++1
    A.Bit++TheclassicprogramminglanguageofBitlandisBit++.Thislanguageissopeculiarandcomplicated.Thelanguageisthatpeculiarasithasexactlyonevariable,calledx.Also,therearetwooperations:Operation++increasesthevalueofv......
  • 机器学习中的算法——支持向量机(SVM)
    1.SVM的核心要素支持向量机是一种二分类模型,他基本模型是定义在特征空间上的间隔最大的线性分类器。通俗的说很类似于上次讲的那个回归的分类,其实从平面上看也是找一条直线来分割,分割的两边就是分类的结果,只不过这次的分类是找到一条线使得它能够对两旁的点距离最远。也就是......
  • 代码随想录算法训练营第二天|977.有序数组的平方、209.长度最小的子数组、59.螺旋矩阵
    LeetCode977有序数组的平方题目链接:977.有序数组的平方思路:双指针,由两侧向中间逼近 LeetCode 209.长度最小的子数组题目链接:209.长度最小的子数组思路:滑动窗口,关键点滑动窗口起始点和终止点位置关系的确定 LeetCode 59.螺旋矩阵题目链接:59.螺旋矩阵关键点:循环处理......
  • 文心一言 VS 讯飞星火 VS chatgpt (156)-- 算法导论12.3 3题
    三、用go语言,对于给定的n个数的集合,可以通过先构造包含这些数据的一棵二叉搜索树(反复使用TREE-INSERT逐个插入这些数),然后按中序遍历输出这些数的方法,来对它们排序。这个排序算法的最坏情况运行时间和最好情况运行时间各是多少?文心一言:在Go语言中,使用二叉搜索树(BST)进行排序......
  • 【机器学习】算法作用与依赖库合集
    算法与库1.决策树:-库: fromsklearn.treeimportDecisionTreeClassifier(分类树) fromsklearn.treeimportDecisionTreeRegressor(回归树)-计算场景:分类和回归问题2.逻辑回归:-库: fromsklearn.linear_modelimportLogisticRegression-......