数据结构与算法-冒泡排序

简介: 数据结构与算法-冒泡排序

冒泡排序是一种简单的排序算法,它通过重复地交换相邻的元素,直到整个序列按照升序或降序排列。它的工作原理如下:

  1. 比较相邻的两个元素。如果前一个元素大于后一个元素,就交换它们的位置。
  2. 对整个序列重复步骤1,直到没有任何一对相邻元素需要交换,也就是说序列已经按照升序排列完成。

具体过程如下:

  1. 从第一个元素开始,比较相邻的两个元素。如果第一个元素大于第二个元素,就交换它们的位置。
  2. 对剩余的元素重复步骤1,直到最后一个元素。
  1. 重复步骤1-2,直到整个序列按照升序排列完成。

附冒泡排序代码实现:

#时间复杂度:O(n**2)
def bubble_sort(li):
    for i in range(len(li)-1):   #第i趟
        flag = False  #巧妙思路 判断第i趟过去之后是否有数的交换 减少不必要的循环
        for j in range(len(li)-i-1): #箭头指第几个数
            if li[j]>li[j+1]:
                li[j],li[j+1]=li[j+1],li[j]
                flag = True  #如果进行了交换 则标志改变
        print(li)
        if not flag: #如果白白走了一趟 说明已经排好 没必要继续循环下去 可以直接停止
            return  #停止循环 减低时间复杂度
li=[3,2,5,6,8,7,4,9,1]
bubble_sort(li)

冒泡排序的时间复杂度为O(n^2),因为它需要进行n-1轮比较和交换操作。虽然它是一种简单的排序算法,但在某些情况下效率较低,因此在实际应用中通常会使用更高效的排序算法,如快速排序、归并排序等。

相关文章
|
15天前
|
机器学习/深度学习 搜索推荐 算法
【再识C进阶2(下)】详细介绍指针的进阶——利用冒泡排序算法模拟实现qsort函数,以及一下习题和指针笔试题
【再识C进阶2(下)】详细介绍指针的进阶——利用冒泡排序算法模拟实现qsort函数,以及一下习题和指针笔试题
|
1天前
|
搜索推荐
排序算法---冒泡排序----详解&&代码
排序算法---冒泡排序----详解&&代码
|
11天前
|
算法 搜索推荐 Java
JavaSE——算法(1/2):认识、冒泡排序、选择排序及优化(介绍、详细图解、代码)
JavaSE——算法(1/2):认识、冒泡排序、选择排序及优化(介绍、详细图解、代码)
9 0
|
12天前
|
人工智能 算法 C语言
数据结构与算法——简单排序-冒泡排序、插入排序,时间复杂度下界(图示、代码、时间复杂度、定理)
数据结构与算法——简单排序-冒泡排序、插入排序,时间复杂度下界(图示、代码、时间复杂度、定理)
10 0
|
12天前
|
存储 机器学习/深度学习 算法
数据结构和算法学习记录——空间复杂度的计算(冒泡排序、阶乘递归、斐波那契数列递归、常见复杂度对比、栈帧、栈溢出)
数据结构和算法学习记录——空间复杂度的计算(冒泡排序、阶乘递归、斐波那契数列递归、常见复杂度对比、栈帧、栈溢出)
6 0
|
12天前
|
算法
数据结构和算法学习记录——时间复杂度的计算(嵌套循环、大O的渐进表示法、双重循环、常数循环、strchr、冒泡排序、二分查找、斐波那契数列递归)
数据结构和算法学习记录——时间复杂度的计算(嵌套循环、大O的渐进表示法、双重循环、常数循环、strchr、冒泡排序、二分查找、斐波那契数列递归)
17 1
|
25天前
|
算法
循环嵌套思路详解 | 一个“在盒子里过家家”的算法 -- 以冒泡排序与打印菱形为例(二)
本文介绍了如何运用特定思路解析和解决编程问题,特别是涉及双层循环的情况。首先,通过一个打印特定图案的例子,解释了将“盒子”作为思考单位的概念,即分析问题中每个循环的作用和内容。接着,以冒泡排序为例,展示了如何将问题分解为外层循环(趟数)和内层循环(每趟的比较与交换),并通过盒子思路简化理解和实现代码。最后,提到了菱形打印的代码优化,鼓励读者思考并应用这种思维方式。总的来说,文章强调了自然地理解和运用循环结构,而不是机械地记忆。
39 2
|
25天前
|
算法
循环嵌套思路详解 | 一个“在盒子里过家家”的算法 -- 以冒泡排序与打印菱形为例(一)
本文介绍了编程中的一种思想,通过菱形打印问题来阐述如何理解和使用循环嵌套。文章提到,初学者在面对循环结构时,可以通过先识别代码块的结束括号来理解整体结构,提高阅读效率。作者提出了“在盒子里过家家”的理解思路,将外层循环看作一个个盒子,内层循环视为盒子里的操作,弱化循环嵌套的概念,强调以盒子为单位思考问题。此外,文章还通过示例解释了内外循环的关系,帮助读者更好地理解循环控制和执行过程。
45 3
|
26天前
|
存储 搜索推荐 算法
[数据结构]————排序总结——插入排序(直接排序和希尔排序)—选择排序(选择排序和堆排序)-交换排序(冒泡排序和快速排序)—归并排序(归并排序)
[数据结构]————排序总结——插入排序(直接排序和希尔排序)—选择排序(选择排序和堆排序)-交换排序(冒泡排序和快速排序)—归并排序(归并排序)
[数据结构]-玩转八大排序(二)&&冒泡排序&&快速排序
[数据结构]-玩转八大排序(二)&&冒泡排序&&快速排序

热门文章

最新文章