前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一文带你学习 Python 冒泡排序

一文带你学习 Python 冒泡排序

原创
作者头像
网络技术联盟站
发布2022-06-15 09:51:09
4480
发布2022-06-15 09:51:09
举报
文章被收录于专栏:网络技术联盟站

冒泡排序是一种用于对列表中的元素进行排序(按升序或降序重新排列)的基本算法。

步骤如下:

  1. 逐个元素地遍历列表
  2. 遇到任何两个相邻的“错误”的顺序(升序或降序)的元素时,交换它们在列表中的位置,否则什么也不做
  3. 这样做直到迭代到达列表的末尾

重复步骤 1 到 3,直到“错误”顺序中不再有任何相邻元素,然后停止

编写一个函数,该函数接受两个参数、一个字母列表和一个指定排序顺序,使用冒泡排序算法,让此函数返回输入列表的排序版本。

例如:f('x', 'c', 'b', 'v', 'z', 'a', "升序") => 'a', 'b', 'c', ' v','x','z'

注意:类型检查(或异常处理)是必要的,忽略大小写敏感。

以下完整的代码,本文将逐一解释。

代码语言:txt
复制
def bubble_sort(list_items, order):
    """Sorts a list using Bubble sort"""

    size_of_list = len(list_items)
    for j in range(size_of_list - 1):
        for i in range(size_of_list - 1):

            # Ascending order
            if order == 'a' or order == 'A':
                if list_items[i].lower() > list_items[i + 1].lower():
                    temp = list_items[i + 1]
                    list_items[i + 1] = list_items[i]
                    list_items[i] = temp

            # 降序
            elif order == 'd' or order == 'D':
                if list_items[i + 1].lower() > list_items[i].lower():
                    temp = list_items[i]
                    list_items[i] = list_items[i + 1]
                    list_items[i + 1] = temp

            else:
                return print("Invalid order! Enter either 'a' or 'd'")

    return print(list_items)


# 排序有两者选择: 升序、降序
list_item = ['v', 'e', 'r', 't', 'i', 'c', 'a', 'l']

# 方法调用
bubble_sort(list_item, 'a')             
bubble_sort(list_item, 'd')             
bubble_sort(list_item, 'z')

首先,我们定义函数bubble_sort(),它接受两个参数,一个列表和排序顺序。接下来,我们使用len()函数在给定列表中找到列表项的数量。

代码语言:txt
复制
def bubble_sort(list_items, order):
    """Sorts a list using Bubble sort"""

    size_of_list = len(list_items)

接下来,我们使用两个for循环进行排序。如果列表的长度为 7,我们将对列表进行 6 × 6 = 36 次排序,以确保列表完全按照给定顺序排序。

代码语言:txt
复制
    for j in range(size_of_list - 1):
        for i in range(size_of_list - 1):

如果选择升序,则检查列表项与下一项,如果该项大于与它交换位置的下一项,否则它保持原位,并与下一项进行检查。这一直持续到我们到达倒数第二个列表项;之后我们从头开始直到size_of_list - 1。

代码语言:txt
复制
            # 升序
            if order == 'a' or order == 'A':
                if list_items[i].lower() > list_items[i + 1].lower():
                    temp = list_items[i + 1]
                    list_items[i + 1] = list_items[i]
                    list_items[i] = temp

如果选择了降序,则将列表项与下一项进行检查,如果小于下一项,则与之交换位置,否则保持原位,并与下一项进行检查。这一直持续到我们到达倒数第二个列表项;之后我们从头开始直到size_of_list - 1。

代码语言:txt
复制
            # 降序
            elif order == 'd' or order == 'D':
                if list_items[i + 1].lower() > list_items[i].lower():
                    temp = list_items[i]
                    list_items[i] = list_items[i + 1]
                    list_items[i + 1] = temp

如果订单错误;也就是说,既没有选择升序也没有选择降序,我们在屏幕上打印一个错误。

代码语言:txt
复制
            else:
                return print("Invalid order! Enter either 'a' or 'd'")

排序后,打印出排序后的列表。

代码语言:txt
复制
    return print(list_items)

最后,我们创建一个订单列表并将其传递给一个函数。当升序、降序以及选择错误的顺序时,我们会检查列表排列。

代码语言:txt
复制
list_item = ['v', 'e', 'r', 't', 'i', 'c', 'a', 'l']

bubble_sort(list_item, 'a')         
bubble_sort(list_item, 'd')           
bubble_sort(list_item, 'z')

输出

代码语言:txt
复制
['a', 'c', 'e', 'i', 'l', 'r', 't', 'v']
['v', 't', 'r', 'l', 'i', 'e', 'c', 'a']
Invalid order! Enter either 'a' or 'd'

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档