python 冒泡排序

部署运行你感兴趣的模型镜像

1. 冒泡排序的基本原理

冒泡排序(Bubble Sort)是一种简单的排序算法,它重复地遍历要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。遍历数列的工作是重复进行的,直到没有再需要交换的元素,这意味着数列已经排序完成。这个过程就像水底的气泡一样逐渐上升到水面。

2. 简单的Python冒泡排序代码示例

以下是一个简单的Python冒泡排序的代码示例:

def bubble_sort(arr):
    n = len(arr)
    for i in range(n):
        for j in range(0, n-i-1):
            if arr[j] > arr[j+1]:
                arr[j], arr[j+1] = arr[j+1], arr[j]
    return arr

# 测试冒泡排序
arr = [3,38,44,15,5,47,36,2,19,48,50,47,27,19]
sorted_arr = bubble_sort(arr)
print("Sorted array:", sorted_arr)

3. 冒泡排序的时间复杂度和空间复杂度

  • 时间复杂度‌:冒泡排序在最坏和平均情况下都是O(n^2),其中n是列表的长度。这是因为它需要双重循环来遍历整个列表。在最好的情况下(即列表已经是有序的),时间复杂度是O(n),但这种情况很少见。
  • 空间复杂度‌:冒泡排序的空间复杂度是O(1),因为它只使用了固定的额外空间来存储临时变量(用于交换)。

4. 冒泡排序的优缺点

优点

  • 简单直观,易于实现。
  • 是稳定的排序算法(即相等的元素在排序后的序列中保持原有的顺序)。

缺点

  • 时间复杂度较高,不适合对大数据集进行排序。
  • 在最坏的情况下,需要进行大量的比较和交换操作。

5. 优化后的Python冒泡排序代码示例

以下是一个优化后的冒泡排序代码示例,通过添加一个标志位来减少不必要的比较:

def bubble_sort_optimized(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  # 如果这一轮没有发生交换,说明数组已经有序,可以提前结束
    return arr

# 测试优化后的冒泡排序
arr =  [3,38,44,15,5,47,36,2,19,48,50,47,27,19]
sorted_arr = bubble_sort_optimized(arr)
print("Sorted array:", sorted_arr)

根据要求编写代码。

1)随机生成范围在0到10的20个小数(包含0和10,保留小数点后两位),并且输出到控制台上。

2)编写冒泡排序算法,使得随机生成的数按照从大到小的顺序排序,并且输出到控制台。

import random
#定义随机函数random_array
def random_array():
    #定义空列表li,用来存储随机数
    li = []
    #循环执行20次
    for i in range(20):
        #将随机的数字添加到li列表中
        li.append(round(random.uniform(0,10),2))
    #返回随机数列表li
    return li
#定义列表元素交换函数,将列表索引i和列表索引j的两个元素继续交换
def swap (listI, i ,j):
    #定义中间变量temp,保存列表索引i的元素
    temp = listI[i]
    #将列表索引j的元素放到列表索引为i的位置
    listI[i] = listI[j]
    #将temp的元素放到列表索引j的位置
    listI[j] = temp
#定义冒泡排序函数
def bubble_sort(listI):
    #循环遍历列表listI
    for i in range(len(listI),1,-1):
        #遍历列表,列表中第j个元素与列表中的其他元素对比大小
        for j in range(1,i):
            #如果当前的第j个元素小于后面的一个元素
            if listI[j] < listI[j-1]:
                #则交换位置,把当前的元素后移,从大到小的排序
                swap(listI,j,j-1)
    #循环结束,返回排序后的元素
    return listI
#调用random_array函数,执行的结果保存到li中
li = random_array()
#将随机列表li传入bubble_sort函数中进行冒泡排序,最后打印排序的后结果,从大到小的排序
print(bubble_sort(li))

 

您可能感兴趣的与本文相关的镜像

Python3.10

Python3.10

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

冒泡排序是一种简单的排序算法,它通过重复地遍历要排序的列表,比较相邻的元素,并交换它们的位置来工作。这个过程会重复进行,直到没有需要交换的元素为止,这时列表就已经排序完成。 下面是一个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 # 如果没有发生交换,说明列表已经有序,提前退出 if not swapped: break return arr # 示例使用 arr = [64, 34, 25, 12, 22, 11, 90] sorted_arr = bubble_sort(arr) print("排序后的数组:", sorted_arr) ``` 输出结果将会是: ``` 排序后的数组: [11, 12, 22, 25, 34, 64, 90] ``` 冒泡排序的基本步骤包括: - **比较相邻元素**:从列表的第一个元素开始,比较相邻的两个元素。 - **交换位置**:如果前一个元素比后一个元素大,则交换它们的位置。 - **重复遍历**:重复上述步骤,直到没有需要交换的元素为止。 - **优化**:通过设置标志位,可以在列表已经有序的情况下提前退出,减少不必要的比较。 冒泡排序的时间复杂度为: - 最坏情况:O(n²) —— 当列表是逆序的时候。 - 最好情况:O(n) —— 当列表已经有序的时候。 - 平均情况:O(n²) 冒泡排序的空间复杂度为 O(1),因为它是一种原地排序算法,不需要额外的存储空间。 此外,冒泡排序还可以通过递归的方式来实现。以下是递归实现冒泡排序一个例子: ```python def recursive_bubble_sort(arr, n=None): if n is None: n = len(arr) if n == 1: return arr for i in range(n - 1): if arr[i] > arr[i + 1]: # 交换元素 arr[i], arr[i + 1] = arr[i + 1], arr[i] return recursive_bubble_sort(arr, n - 1) # 测试 arr3 = [8, 3, 7, 4, 2, 9] print(recursive_bubble_sort(arr3)) # 输出:[2, 3, 4, 7, 8, 9] ``` 冒泡排序虽然简单,但在实际应用中效率较低,通常不适用于大数据量的排序任务。然而,对于教学目的或者小数据集,它仍然是一个很好的学习工具。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值