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日

相关文章

  • php数组冒泡排序算法实例

    让我们来详细讲解一下“PHP 数组冒泡排序算法实例”。 什么是冒泡排序? 冒泡排序算法是一种基于比较的排序算法,它重复地遍历要排序的列表,比较相邻的两个元素,如果它们的顺序错误,就将它们交换位置。这个过程直接比较相邻元素,每一轮都将最小的元素放到序列的开头,就像气泡不断上升一样,因此得名冒泡排序。 基本的冒泡排序实现方法 下面是一个基本的实现方法,用 PHP…

    算法与数据结构 2023年5月19日
    00
  • js实现常用排序算法

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

    算法与数据结构 2023年5月19日
    00
  • Java中sort排序函数实例详解

    Java中sort排序函数实例详解 在Java中,Sort排序函数可以对数组进行排序,它是Java内置的一个排序函数。通过使用这个函数,可以快速、方便地对数组进行排序。 Syntax 以下是sort函数的语法: public static void sort(int[] arr) 其中arr是要排序的数组。 Parameters 以下是sort函数的参数: …

    算法与数据结构 2023年5月19日
    00
  • 常用的C语言排序算法(两种)

    常用的C语言排序算法(两种) 排序算法是计算机程序员经常用到的算法,在实际的开发中排序算法往往可以提升程序的效率。在C语言中常用的排序算法有很多种,其中比较常见的包括快速排序和冒泡排序两种。 快速排序 快速排序(Quick Sort)是一种分而治之的思想,它通过在数据集合中挑选一个基准数,将数据集合分成两部分,一部分大于基准数,一部分小于基准数,然后对这两部…

    算法与数据结构 2023年5月19日
    00
  • C++中字符串全排列算法及next_permutation原理详解

    C++中字符串全排列算法及next_permutation原理详解 介绍 全排列是指将一组数按一定顺序进行排列,得到所有有可能的组合。例如,对于数字1、2、3,全排列如下: 123132213231312321 C++中有现成的函数next_permutation可以实现全排列,但理解其原理仍然很重要,本篇文章将详细讲解next_permutation的原理…

    算法与数据结构 2023年5月19日
    00
  • C语言快速排序函数用法(qsort)

    C语言快速排序函数用法(qsort) 简介 快速排序是一种常见的排序算法,而C语言中的qsort函数则是一种快速排序的实现。使用qsort函数,我们无需自己编写快速排序算法的代码,只需要提供一个排序所需的比较函数即可。使用qsort函数,既可以方便的排序数组,还可以排序链表等数据结构。 函数原型 void qsort(void *base, size_t n…

    算法与数据结构 2023年5月19日
    00
  • C++实现选择性排序(SelectionSort)

    C++实现选择性排序(SelectionSort) 选择性排序(Selection Sort)是计算机科学中一种简单直观的排序算法。它的工作原理是:首先在未排序的数列中找到最小(大)的元素,然后将其存放到数列的起始位置,接着再从剩余的未排序元素中继续寻找最小(大)的元素,然后放到已排序序列的末尾。以此类推,直到所有元素均被排序完毕。 具体的实现步骤如下: 在…

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

    C++排序算法之插入排序 插入排序是一种简单且直观的排序算法,在实现上也比较容易。它的基本思路是把一个待排序的序列分成两个部分:已排序部分和未排序部分,然后从未排序部分取出一个元素插入到已排序部分的合适位置,作为新的已排序部分。 算法过程 插入排序的过程可以用以下步骤概括: 将序列的第一个元素看成已排序部分,其他元素看成未排序部分 从未排序部分选择一个元素,…

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