Python 冒泡排序

本文介绍了冒泡排序算法的原理及其实现过程,并给出了Python代码示例。通过两两比较相邻记录,将较大的记录逐渐往后移,直至整个序列有序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

冒泡排序(Bubble Sort),是一种较简单的排序算法。

冒泡排序算法原理:
开始时扫描整个序列,在扫描过程中两两比较相邻记录,如果第一个数比第二个数大,就交换他们,这样第一趟下来,最大的记录就会被“沉到”序列的最后面一个位置,第二趟开始扫描除了最后一个元素中的第二大记录并“沉到”倒数第二个位置,重复上述操作,直到n - 1扫描后,整个序列就排好序了。如下图所示:

12

Python实现冒泡核心代码如下:

def bubbleSort(list1) :
  n = len(list1)
  for i in xrange(n - 1) :
  #控制比较的趟数
    for j in xrange(n - i - 1) :
    #控制每一趟比较n - i个元素
      if list1[j] > list1[j + 1] :
        #两两比较,前大于后则交换
        tmp = list1[j]
        list1[j] = list1[j + 1]
        list1[j + 1] = tmp

该算法的基本语句是双层循环中的比较语句,其时间复杂度为O(n2)。

### 冒泡排序Python实现 以下是基于已有引用内容整理并完善的冒泡排序示例代码: ```python 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 # 更新标志位为True if not swapped: # 若未发生任何交换,提前结束排序 break return arr # 返回排序后的数组 # 测试代码 if __name__ == "__main__": arr = [64, 34, 25, 12, 22, 11, 90] # 原始数组 print("原始数组:", arr) sorted_arr = bubble_sort(arr) # 调用函数进行排序 print("排序后的数组:", sorted_arr) ``` #### 关于时间复杂度和空间复杂度 - **最坏情况的时间复杂度**:当输入数组完全逆序时,需进行最多的比较和交换操作,其时间为 \(O(n^2)\)[^4]。 - **最好情况的时间复杂度**:如果输入数组已经是有序状态,则只需一次遍历即可完成排序,此时复杂度为 \(O(n)\)[^4]。 - **平均时间复杂度**:通常情况下,冒泡排序的时间复杂度为 \(O(n^2)\)[^4]。 - **空间复杂度**:由于该算法只使用了一个额外变量 `swapped` 来记录是否有交换发生,因此它的空间复杂度为 \(O(1)\),属于原地排序算法。 #### 工作原理概述 冒泡排序的核心思想在于反复遍历待排序序列中的每一对相邻元素,并按照指定规则调整它们之间的相对位置。具体而言,在每一次完整的遍历过程中,当前轮次的最大值会被逐步移至最终目标索引处;此同时引入布尔型变量 `swapped` 对整个流程加以优化——一旦某一轮内没有任何数据被重新排列,则可断定整体已达到理想秩序从而立即终止后续迭代动作[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值