python递归实现快速排序

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实现常用排序算法

    JS实现常用排序算法 排序算法是计算机领域中的重要算法之一,其作用是将一组无序的数据按照一定的规则进行排列,便于数据的查找和统计。在前端开发领域中,JS是常用的编程语言,下面一起来详细讲解如何用JS实现常用排序算法。 冒泡排序 冒泡排序是一种简单的排序算法,其具体思路是对需要排序的元素从头开始进行比较,如果前一个元素比后一个元素大,就交换这两个元素的位置,一…

    算法与数据结构 2023年5月19日
    00
  • JavaScript算法面试题

    JavaScript算法面试题攻略 1. 理解算法 在准备 JavaScript 算法面试前,需要先了解什么是算法。算法是指解决问题的一系列步骤,常用于解决复杂的问题,在计算机科学中有非常重要的应用。 2. 熟悉常见数据结构 准备算法面试的重点是熟悉常见数据结构。这些数据结构包括数组、链表、栈、队列、堆、散列表等。 3. 学习算法题的分类 在解决算法问题之前…

    算法与数据结构 2023年5月19日
    00
  • C#实现冒泡排序和插入排序算法

    C#实现冒泡排序和插入排序算法 冒泡排序算法 冒泡排序算法是一种基本的排序算法,其基本思想是通过对相邻的元素进行比较和交换,逐渐把待排序的元素交换到相应的位置上。 在C#中,实现冒泡排序非常简单,代码示例如下: public static void BubbleSort(int[] arr) { int len = arr.Length; for (int …

    算法与数据结构 2023年5月19日
    00
  • C语言直接选择排序算法详解

    C语言直接选择排序算法详解 什么是选择排序算法 选择排序算法(Selection Sort)是一种简单直观的排序算法。该算法每次从未排序的数中选择最小(或最大)的一个数,将其放在已排序数列的末尾,直到所有数排序完成。因为该算法在每次排序后的下一轮排序不会再考虑之前选择的最小(或最大)值,所以属于不稳定排序算法。 算法流程 选择排序算法主要分为两个步骤: 在未…

    算法与数据结构 2023年5月19日
    00
  • ASP使用FSO读取模板的代码

    ASP(Active Server Pages)是Microsoft公司推出的一种服务器端动态网页开发技术。FSO(File System Object)是ASP中访问文件系统的一种重要方式。通过FSO,我们可以实现对文件的读写、创建和删除等操作。在ASP中使用FSO读取模板文件,可以实现动态网站中的静态内容显示。下面是使用FSO读取模板文件的完整攻略: 1…

    算法与数据结构 2023年5月19日
    00
  • MybatisPlus中的insert操作详解

    MybatisPlus 是 MyBatis 的增强工具包,可以极大地简化 MyBatis 的操作。其中包括许多基础操作,例如insert、update、delete、select等操作。在这里,我们将详细讲解 MybatisPlus 中的 insert 操作。 什么是 MybatisPlus 中的 insert 操作? MybatisPlus 中的 inse…

    算法与数据结构 2023年5月19日
    00
  • c++插入排序详解

    c++插入排序详解 1. 插入排序算法介绍 插入排序法是一种简单直观的排序方法。它的基本思路是通过每次将一个待排序的元素按照其大小插入到已经排好序的一组元素中,直到全部元素插入完毕,即排序完毕。 在实际应用中,对于较小的数据集,插入排序通常比快速排序和归并排序等复杂度为O(nlogn)的算法执行效率更高。 2. 插入排序算法的实现 下面给出一个C++实现的插…

    算法与数据结构 2023年5月19日
    00
  • 算法学习入门之使用C语言实现各大基本的排序算法

    算法学习入门之使用C语言实现各大基本的排序算法 为什么要学习排序算法 排序算法是计算机科学的基础知识之一,不仅仅在编程中经常用到,还是算法设计领域的重头戏。了解各种排序算法的优缺点,能够在实际编程中选择合适的排序算法,从而提高程序的效率和可维护性。 常见排序算法 常见的排序算法有很多种,本文将介绍以下10种排序算法: 冒泡排序 选择排序 插入排序 希尔排序 …

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