算法学习-冒泡排序/选择排序/插入排序

def bubble_sort(list):
    # 获取列表的长度
    long = len(list)

    # 使用 while 循环对列表进行排序
    while long > 1:
        # 对列表进行一次遍历
        for i in range(long):
            # 获取当前位置的元素
            needle = list[i]

            # 判断当前位置是否为最后一个位置
            if i != long - 1:
                # 如果不是最后一个位置,判断当前位置的值是否比下一个位置的值小
                if list[i] < list[i + 1]:
                    # 如果当前位置的值比下一个位置的值小,则交换这两个位置的值
                    list[i] = list[i + 1]
                    list[i + 1] = needle
                    needle = list[i]
            else:
                # 如果当前位置已经是最后一个位置,跳出循环
                break

        # 对列表进行下一轮排序,排除已经排好序的元素
        long = long - 1

    # 返回排好序的列表
    return list

冒泡排序

def select_sort(list):
    # 获取列表的长度
    long = len(list)

    # 新建一个空列表用于存储排序后的元素
    new_list = []

    # 使用 while 循环对列表进行排序
    while long > 1:
        # 遍历列表
        for i in range(long):
            # 找到列表中最大的元素并把它添加到新列表中
            needle = list[0]
            for j in range(long):
                if j != long - 1:
                    if needle < list[j + 1]:
                        needle = list[j + 1]
                else:
                    break
            new_list.append(needle)

            # 把最大元素从原列表中移除
            list.remove(needle)

            # 更新列表长度,排除已经排好序的元素
            long = long - 1

    # 返回排序后的新列表
    return new_list

选择排序

def insert_sort(list):
    # 遍历列表,并从第二个元素开始进行插入排序
    for i in range(1, len(list)):
        # 获取当前位置的元素并存储到 tmp 变量中
        tmp = list[i]

        # 定义一个指针 j 并初始化为当前位置的前一个位置
        j = i - 1

        # 循环查找需要插入的位置,并进行元素的移动
        while (j >= 0 and list[j] > tmp):
            list[j + 1] = list[j]  # 将当前位置向右移动一位
            j = j - 1  # 继续向左查找

        # 找到需要插入的位置,将 tmp 插入到该位置
        else:
            list[j + 1] = tmp

    # 返回排序后的列表
    return list

插入排序

时间复杂度:

名称时间复杂度
冒泡排序O(n^2)
插入排序O(N)-O(n^2)
选择排序O(1)-O(n)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值