py冒泡排序的分析与实现

什么是冒泡排序:

冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法

它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。

这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。

                                                                                                                     ——百度百科

冒泡排序的原理(从小到大排序为例):

        比较相邻的元素。如果第一个比第二个大,就交换他们两个。

        第一轮交换完成之后最大的数在最后一个;

        第二轮交换完之后次大的数在倒数第二个;

        ......

        重复上述交换动作,直到没有任何一对数字需要交换 或者 全部数字比较完成。

图示:比较5  7  8  2  1  3  4

第一轮比较: 得到5  7  2   1  3   4   8

 第二轮比较:得到5  2  1  3  4  7  8

 

 同上述步骤

第三轮比较得到:2  1  3  4  5  7  8

第四轮比较得到:1  2  3  4  5  7  8 (因为是随机取的数,导致第四轮就排序完成。通常情况下我们要一直运行到最后一轮才能保证排序完成)

第五轮比较得到:1  2  3  4  5  7  8

第六轮比较得到:1  2  3  4  5  7  8

至此全部比较结束

讲解:

为什么是六轮呢?一共7个数,第一轮将8交换到最后一个,第二轮将7交换到倒数第二个,那么一直到第2个数,是需要交换7-1=6轮的。

那每轮需要比较交换几次呢?第一轮将8交换到最后一个,一共比较交换了6次,第二轮将7交换到倒数第二个,一共比较交换了5次。(那么有人会问,最后一次比较怎么不算?是因为算法本身就是第一次找到最大的数放在最后,那么第二轮进行的时候是不需要再与最后一个数进行比较的)第三轮将5放在倒数第三位,一共比较交换4次。可以得出每轮进行的比较交换次数 = 7 - 第几轮

得出的结论就是,n个数进行比较时,比较n-1轮,每轮比较的次数是n-i(第几轮)

流程图如下:

python代码如下:

正常情况:

num_list = [5, 7, 8, 2, 1, 3, 4]
#[0,6)
for i in range(0,len(num_list) - 1):
    
    for j in range(0,len(num_list) - i - 1):
        if num_list[j] > num_list[j + 1]:
            n = num_list[j]
            num_list[j] = num_list[j + 1]
            num_list[j + 1] = n
print(num_list)

 考虑特殊情况,比如上边出现的,没有到最后一轮就已经比较完毕

num_list = [5, 7, 8, 2, 1, 3, 4]
for i in range(1, len(num_list)):
    # 初始为未交换状态
    is_change = False
    for j in range(0, len(num_list) - i):
        if num_list[j] > num_list[j + 1]:
            n = num_list[j]
            num_list[j] = num_list[j + 1]
            num_list[j + 1] = n
            # 发生交换时,标记为true
            is_change = True
    # 当没有发生交换时,结束循环
    if not is_change:
        break
print(num_list)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 冒泡排序的基本思想是:比较相邻的元素,如果前一个比后一个大,就交换他们的位置。在Python中,可以使用以下代码实现冒泡排序:def bubble_sort(nums): for i in range(len(nums)-1): # 这个循环负责设置冒泡排序进行的次数 for j in range(len(nums)-i-1): # j为列表下标 if nums[j] > nums[j+1]: nums[j], nums[j+1] = nums[j+1], nums[j] # 交换两个数的位置 return nums nums = [5,2,45,6,8,2,1] print(bubble_sort(nums)) ### 回答2: 当然可以帮您写一个Python冒泡排序算法冒泡排序是一种基础的排序算法,它通过不断比较相邻两个元素的大小并交换位置来达到排序的目的。 下面是一个使用Python语言实现冒泡排序的示例代码: ```python def bubble_sort(arr): n = len(arr) for i in range(n - 1): # 需要进行 n-1 轮比较和交换 for j in range(n - 1 - i): # 每轮比较次数逐渐减少 if arr[j] > arr[j+1]: arr[j], arr[j+1] = arr[j+1], arr[j] # 交换位置 # 测试示例 arr = [82, 12, 31, 42, 3, 67, 23] bubble_sort(arr) print("排序结果:", arr) ``` 在上述代码中,我们定义了一个名为`bubble_sort`的函数,输入参数是要排序的数组`arr`。利用两层嵌套循环来进行排序操作,外层循环用来控制需要进行的比较和交换的轮数,内层循环则用来遍历每一轮需要比较的元素对。如果相邻两个元素的大小关系不正确,就进行位置交换。最终,数组中的元素会按照从小到大的顺序排列。 在上述代码中,给定的示例数组`arr`为`[82, 12, 31, 42, 3, 67, 23]`,经过冒泡排序后的结果会打印出来,排序结果为`[3, 12, 23, 31, 42, 67, 82]`。 希望以上代码和解释能够满足您的需求,如果有其他问题,请随时告诉我。 ### 回答3: 当然可以帮您写一个Python冒泡排序冒泡排序是一种基本的排序算法,它通过多次比较和交换相邻元素的方式将数组或列表中的元素按顺序排列。 以下是一个简单的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] # 测试例子 arr = [64, 34, 25, 12, 22, 11, 90] bubble_sort(arr) print("排序后的数组:", arr) ``` 在这个例子中,我们定义了一个名为`bubble_sort`的函数,它以数组`arr`作为输入。函数中使用两个嵌套的`for`循环来比较相邻元素并进行交换,直到将数组中的所有元素都按照升序排列。 运行测试例子后,输出结果为`[11, 12, 22, 25, 34, 64, 90]`,即排序后的数组。 希望这个简单的冒泡排序实现能够满足您的需求。如果您有其他问题,请随时告诉我。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值