快速排序,含python代码和视频演示

转载自:https://procjx.github.io/2020/03/07/%E3%80%90%E7%AE%97%E6%B3%95%E3%80%91%E5%BF%AB%E9%80%9F%E6%8E%92%E5%BA%8F-Quick-Sort/

算法介绍

快速排序,又称分割交换排序,是目前公认的最佳排序算法,核心思想是在数列中找一个数作为中介点,将比中介点小的数放到数列的左边(将不比中介点小的数放到数列的右边,两者是同时成立的,只要记住一个就好),把中介点放到相应的位置上,再对左右两边的数列进行同样操作直到两边最多包含一个数字。

视频演示

视频地址:https://www.bilibili.com/video/av18980345

python代码

#-*- coding: utf-8 -*-

# 升序
def quick_sort(data):
    if len(data)<=1:
        return data
    pivot = data[-1] # 取最后一个数作为pivot
    i = 0 # i记录比pivot小的数的个数
    j = 0 # j用来遍历整个数列
    n = len(data)

    while j < n-1:
        if data[j]<pivot: # 比pivot小的数都放在前面
            data[i], data[j] = data[j], data[i]
            i += 1 
        j += 1

    data[i], data[-1] = data[-1], data[i] # 将pivot放在第 i 个位置

    if i>0:
        # 比 pivot 小的数据不为空,则对其进行快速排序
        data[:i] = quick_sort(data[:i])
    if i+1<n:
        # 比 pivot 大的数据不为空,则对其进行快速排序
        data[i+1:] = quick_sort(data[i+1:])

    return data

if __name__ == '__main__':
    data = [10, 80, 30, 90, 40, 50, 70]
    sorted_data = quick_sort(data.copy())
    print("排序前:", data)
    print("排序后:", sorted_data)

算法分析

快速排序的时间复杂度为:O(n^2)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值