快速排序(使用Python描述)

描述

  归并排序和快速排序都是使用分而治之的思维.归并排序侧重点是最终结果的合并.快速排序的重点则是放在了子问题的分解上面.




代码一

def quick_sort(arr):

    len_arr = len(arr)
    
    if  len_arr<2:
        return arr
    
    middle_value = arr[len_arr//2]
    arr.remove(middle_value)
    left,right = [],[]

    for item in arr:
        if item < middle_value:
            left.append(item)
        else:
            right.append(item)
    
    print(left,right)
    return quick_sort(left) + [middle_value] + quick_sort(right)

arr = [6,15,8,7]
#print(quick_sort(arr))

代码二


def quick_sort_for_book(arr,left,right):

    if left<right:
        q = partition(arr,left,right)
        # 使用了两次递归比较难以理解.
        quick_sort_for_book(arr,left,q-1)
        quick_sort_for_book(arr,q+1,right)


def partition(arr,left,right): # 数组划分
    x = arr[right]
    i = left -1
    for j in range(left,right):
        if arr[j] <=x:
            i+=1
            arr[i],arr[j] = arr[j],arr[i]
    arr[i+1],arr[right] = arr[right],arr[i+1]

    return i + 1


arr1 = [8,6,15,14,13]
quick_sort_for_book(arr1,0,len(arr1)-1)
print(arr1)




参考

posted @   高坦的博客  阅读(206)  评论(0编辑  收藏  举报
编辑推荐:
· 理解Rust引用及其生命周期标识(下)
· 从二进制到误差:逐行拆解C语言浮点运算中的4008175468544之谜
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
阅读排行:
· C# 13 中的新增功能实操
· Ollama本地部署大模型总结
· 2025成都.NET开发者Connect圆满结束
· langchain0.3教程:从0到1打造一个智能聊天机器人
· 用一种新的分类方法梳理设计模式的脉络
点击右上角即可分享
微信分享提示