python实现冒泡排序、选择排序、插入排序、快速排序

list_2 = [3, 2, 9, 10, 5]


def bubble_sort(list_1):
    for i in range(len(list_1) - 1):
        for j in range(len(list_1) - i - 1):
            if list_1[j] < list_1[j+1]:
                list_1[j], list_1[j+1] = list_1[j+1], list_1[j]
    return list_1


def select_sort(list_1):
    for i in range(len(list_1)):
        for j in range(i + 1, len(list_1)):
            if list_1[i] > list_1[j]:
                list_1[i], list_1[j] = list_1[j], list_1[i]
            print(list_1)
    return list_1


def insert_sort(list_1):
    for i in range(1, len(list_1)):
        index = i
        while list_1[index -1] > list_1[index ] and index - 1 >= 0:
            list_1[index ], list_1[index -1] = list_1[index -1], list_1[index ]
            index -= 1
    return list_1


# 快速排序第一种方法,递归。简单易懂,推荐
def quicksort(array):
    if len(array) < 2:
        return array  # 基线条件:为空或只包含一个元素的数组是“有序”的
    else:
        pivot = array[0]  # 递归条件
        less = [i for i in array[1:] if i <= pivot]  # 由所有小于基准值的元素组成的子数组
        greater = [i for i in array[1:] if i > pivot]  # 由所有大于基准值的元素组成的子数组
        return quicksort(less) + [pivot] + quicksort(greater)


#快速排序第二种方法,一步步实现
def quick_sort(nums, left, right):
    if left < right:
        i = left
        j = right
        # 取第一个元素为枢轴量
        pivot = nums[left]
        while i != j:
            # 交替扫描和交换
            # 从右往左找到第一个比枢轴量小的元素,交换位置
            while j > i and nums[j] > pivot:
                j -= 1
            if j > i:
                # 如果找到了,进行元素交换
                nums[i] = nums[j]
                i += 1
            # 从左往右找到第一个比枢轴量大的元素,交换位置
            while i < j and nums[i] < pivot:
                i += 1
            if i < j:
                nums[j] = nums[i]
                j -= 1
        # 至此完成一趟快速排序,枢轴量的位置已经确定好了,就在i位置上(i和j)值相等
        nums[i] = pivot
        # 以i为枢轴进行子序列元素交换
        quick_sort(nums, left, i-1)
        quick_sort(nums, i+1, right)
    return nums


print(quick_sort(list_2, 0, len(list_2) - 1))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Deep Play

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值