python递归实现快速排序

yizhihongxing

Python递归实现快速排序

快速排序是一种常用的排序算法,递归是快速排序算法的重要部分。

快速排序算法步骤

  1. 选择一个基准数(pivot)。
  2. 将待排序数组分成左右两个子数组,小于等于基准数的元素放在左边,大于基准数的元素放在右边。
  3. 递归地对左右两个子数组进行上述排序过程。

Python代码实现

def quick_sort(arr):
    if len(arr) <= 1:
        return arr
    pivot = arr[len(arr)//2] #选择基准数,这里简单的选择中间的数
    left = [x for x in arr if x < pivot] #小于pivot的元素放入left列表中
    middle = [x for x in arr if x == pivot] #等于pivot的元素放入middle列表中
    right = [x for x in arr if x > pivot] #大于pivot的元素放入right列表中
    return quick_sort(left) + middle + quick_sort(right) #递归调用快速排序,最后将三个列表合并

arr = [3,6,1,2,7,9,4,5,8]
print(quick_sort(arr))

示例说明

示例一

输入:arr = [3,6,1,2,7,9,4,5,8]

输出:[1, 2, 3, 4, 5, 6, 7, 8, 9]

解释:

首先选取中间的数pivot=5,遍历数组,小于5的数放在left数组中,等于5的数放在middle数组中,大于5的数放在right数组中。数组变成了[3,1,2,4] + [5] + [6,7,9,8]。递归调用快速排序quick_sort(left), quick_sort(right),直到left和right数组长度为1。最后将三个列表拼接起来即可。

示例二

输入:arr = [7,4,8,1,2,9,3,6,5]

输出:[1, 2, 3, 4, 5, 6, 7, 8, 9]

解释:

首先选取中间的数pivot=3,遍历数组,小于3的数放在left数组中,等于3的数放在middle数组中,大于3的数放在right数组中。数组变成了[1,2] + [3] + [7,4,8,9,6,5]。递归调用快速排序quick_sort(left), quick_sort(right),直到left和right数组长度为1。最后将三个列表拼接起来即可。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python递归实现快速排序 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • JS中的算法与数据结构之字典(Dictionary)实例详解

    下面我将详细讲解“JS中的算法与数据结构之字典(Dictionary)实例详解”的完整攻略。 什么是字典? 字典是一种存储唯一键和对应值的数据结构,每个键对应一个值。JavaScript 中的对象就是字典的一种实现,通过键值对来存储和访问数据。 字典的操作 字典支持以下几种操作: 添加键值对 删除键值对 查找键值对 获取所有键 获取所有值 字典的实现 下面是…

    算法与数据结构 2023年5月19日
    00
  • Java冒泡排序(Bubble Sort)实例讲解

    下面我将为你详细讲解“Java冒泡排序(Bubble Sort)实例讲解”的完整攻略。 1. 冒泡排序简介 冒泡排序(Bubble Sort)是一种简单且常见的排序算法。它通过重复地遍历待排序数组,每次遍历将两个相邻的元素进行比较,如果它们的顺序错误就交换它们的位置,直到没有需要交换的元素为止。 2. 冒泡排序Java实现 下面是一个Java实现冒泡排序的示…

    算法与数据结构 2023年5月19日
    00
  • stl常用算法(Algorithms)介绍(stl排序算法、非变序型队列)

    STL常用算法介绍 STL(Standard Template Library)是C++标准库的一个庞大组成部分,提供了大量的常用算法,容器以及迭代器等等。这些工具都可以被拿来用来解决大部分的计算问题。其中stl常用算法主要包括排序算法和非变序型队列,下面进行详细讲解。 stl排序算法 STL提供了丰富的排序算法模板,可以直接拿来使用,无需重新实现。以下是一…

    算法与数据结构 2023年5月19日
    00
  • input标签内容改变的触发事件介绍

    当用户在表单中输入内容时,网页需要对用户输入进行实时的响应,以方便用户进行修改和确认。而input标签就是常用于表单输入的标签之一,它提供了多种类型的输入框,如文本框、单选框、复选框、下拉框等。在这些输入框中,当其中的内容发生改变时,我们需要将其更新到网页中,这时就需要用到“input标签内容改变的触发事件”。 事件是指在特定的时刻发生的动作或行为,而事件处…

    算法与数据结构 2023年5月19日
    00
  • Python利用treap实现双索引的方法

    Python利用treap实现双索引的方法 本文将介绍如何用Python语言实现基于treap的双索引方法来建立文本检索系统。 什么是treap? treap是一种二叉搜索树和堆(heap)的混合体。在treap中,每个节点包含一个键值和一个随机权重值。treap强制节点按照二叉搜索树的顺序排列,同时也保持堆的性质,即每个节点的权重都会小于其子节点的权重。这…

    算法与数据结构 2023年5月19日
    00
  • MySQL排序原理和案例详析

    MySQL排序的原理主要包括内部排序和外部排序两种方式。内部排序主要用于处理较小的数据集,而外部排序则专门用于处理大型数据集。 在内部排序中,MySQL主要采用快速排序算法进行排序。快速排序是一种常用的分治算法,其核心思想是通过将一个大问题分解成多个小问题并逐步解决,最终将所有小问题关键字的排序结果合并起来得到整个序列的有序排列。 在外部排序中,MySQL采…

    算法与数据结构 2023年5月19日
    00
  • 思科CCNA认证学习笔记(一)网络基础知识

    思科CCNA认证学习笔记(一)网络基础知识攻略 概述 思科CCNA认证是网络行业的重要认证之一,具有广泛的认可度和传播力。其中网络基础知识是CCNA考试的重要内容,对于初学者来说,掌握网络基础知识是入门的必经之路。本篇攻略将详细讲解网络基础知识的相关内容,包括讲解网络的概念、网络的分类、网络的拓扑结构、网络的协议以及网络的设备。 网络的概念 网络是由两台或两…

    算法与数据结构 2023年5月19日
    00
  • 深入解析Radix Sort基数排序算法思想及C语言实现示例

    深入解析Radix Sort基数排序算法思想及C语言实现示例 什么是基数排序算法 基数排序即Radix Sort,是一种非比较型排序算法。相比于其他排序算法,如快速排序、归并排序等,基数排序的时间复杂度较为稳定,且不受数据规模的影响,适用于数据范围较小但位数较多的序列排序。 基数排序算法思想 基数排序算法的核心思想是按照不同位数上的数字对数据进行排序,从低位…

    算法与数据结构 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部