python快速排序代码实例

Python 快速排序 (Quick Sort) 是一种排序算法,它利用分治思想来快速排序一个数组或序列。该算法的时间复杂度为 O(nlogn)。

要理解快速排序算法,我们需要掌握以下概念:

  • 基准值 (pivot):排序过程中用于比较的值。在每一轮的排序过程中,基准值会将数组或序列分成两部分。
  • 子数组 (subarray):对于一个数组或序列,它的一部分就是一个子数组。在快排中,子数组的划分是对基准值的判断和比较得出的。

快速排序的实现步骤

以下是快速排序算法的实现步骤:

  1. 选取基准值 pivot,一般取数组的第一个元素或者随机数。
  2. 将数组或序列分成小于等于和大于等于基准值的两个子数组 subarrayLeft 和 subarrayRight,并将基准值放在它们中间。
  3. 对 subarrayLeft 和 subarrayRight 分别递归快排。
  4. 递归出口是子数组的长度为 0 或 1。

Python 代码示例

下面给出一个 Python 的快速排序代码实例:

def quicksort(arr):
    if len(arr) <= 1:
        return arr

    pivot = arr[0]
    subarrayLeft = []
    subarrayRight = []

    for i in arr[1:]:
        if i <= pivot:
            subarrayLeft.append(i)
        else:
            subarrayRight.append(i)

    return quicksort(subarrayLeft) + [pivot] + quicksort(subarrayRight)

该代码实现的是递归快速排序。函数传入一个数组,如果长度小于等于 1 就直接返回该数组,否则选取第一个元素作为基准值,并将数组分成左右两部分,然后分别对左右两部分递归快排。

arr = [3, 2, 1, 5, 4]
print(quicksort(arr))  # [1, 2, 3, 4, 5]

对于上面的示例代码,如果输入的数组是 [3, 2, 1, 5, 4],输出结果将是 [1, 2, 3, 4, 5]。

另外,我们还可以实现原地快速排序。以下是 Python 原地快速排序代码示例:

def quicksortInPlace(arr):
    def partition(left, right):
        pivot = arr[right]
        i = left - 1

        for j in range(left, right):
            if arr[j] <= pivot:
                i += 1
                arr[i], arr[j] = arr[j], arr[i]

        arr[i + 1], arr[right] = arr[right], arr[i + 1]
        return i + 1

    def _quicksort(left, right):
        if left < right:
            pivotIndex = partition(left, right)
            _quicksort(left, pivotIndex - 1)
            _quicksort(pivotIndex + 1, right)

    _quicksort(0, len(arr) - 1)
    return arr

该代码实现的是原地快速排序。我们传入一个数组,然后定义 partition 函数来进行分区,该函数使用 right 作为基准值 pivot,并返回 pivot 的最终索引。在快速排序的整个过程中,比 pivot 小的数放在数组的左侧,比 pivot 大的数放在数组的右侧。

arr = [3, 2, 1, 5, 4]
quicksortInPlace(arr)
print(arr)  # [1, 2, 3, 4, 5]

对于上面的示例代码,如果输入的数组是 [3, 2, 1, 5, 4],程序会直接通过原地排序修改原数组,输出结果将是 [1, 2, 3, 4, 5]。

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

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

相关文章

  • Java实现单向链表的基本功能详解

    Java实现单向链表的基本功能详解 单向链表是一种常见的数据结构,它由一系列节点组成,每个节点包含存储数据的元素和一个指向下一个节点的指针。Java语言可以很方便地实现单向链表,本文将详细介绍Java实现单向链表的基本功能。 一、定义链表节点类 链表的基本单元是节点,我们需要定义一个节点类来描述它。节点类需要包含两个部分:存储数据的元素和指向下一个节点的指针…

    算法与数据结构 2023年5月19日
    00
  • C语言实现冒泡排序算法的示例详解

    C语言实现冒泡排序算法的示例详解 冒泡排序是一种简单但效率较低的排序算法。它重复遍历要排序的数列,每次比较相邻两个元素,如果顺序不对就交换两元素顺序。该算法的时间复杂度为 O(n^2)。 以下是C语言实现冒泡排序的示例代码: #include <stdio.h> int main() { int arr[] = {5, 3, 8, 6, 4}; …

    算法与数据结构 2023年5月19日
    00
  • C语言深入探究直接插入排序与希尔排序使用案例讲解

    C语言深入探究直接插入排序与希尔排序使用案例讲解 直接插入排序 算法描述 直接插入排序的基本思想是将一个记录插入到已经排序好的有序表中,从而得到一个新的、记录数增加1的有序表。具体算法流程如下: 从第一个元素开始,该元素可以认为已经被排序 取出下一个元素,在已经排序的元素序列中从后向前扫描 如果该元素大于新元素,将该元素移到下一位置 重复步骤3,直到找到已排…

    算法与数据结构 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
  • 常用的C语言排序算法(两种)

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

    算法与数据结构 2023年5月19日
    00
  • JS排序之快速排序详解

    JS排序之快速排序详解 快速排序是一种高效的排序算法,它的核心思想是分治。快排的具体步骤如下: 选择一个基准元素,将序列中所有元素和这个基准元素进行比较,将比基准元素小的元素放入左侧序列,将比基准元素大的元素放入右侧序列。 递归地对左右两个子序列进行快速排序,直到每个子序列只有一个元素或者为空。 示例1:将序列[3,1,6,4,8,2,5,7]进行快速排序。…

    算法与数据结构 2023年5月19日
    00
  • C语言实现单链表的快速排序算法

    下面是详细的攻略: 单链表快速排序算法的原理 在单链表上实现快速排序,需要了解快速排序算法的原理。快速排序是一种常用的基于比较的排序算法,它的基本思想是:选取一个基准元素(pivot),将数组分成两个部分,一个部分是小于基准元素的,一个部分是大于基准元素的。然后对这两个部分分别递归进行快排,最终得到排序后的数组。 在单链表上,选择基准元素也是一样的,不同的是…

    算法与数据结构 2023年5月19日
    00
  • C#算法之全排列递归算法实例讲解

    C#算法之全排列递归算法实例讲解 什么是全排列? 全排列是指将一个给定的集合中的元素进行排列,使得每个元素只出现一次,且每个元素在排列中的位置是不确定的,从而得到的所有不同排列。比如给定集合{1, 2, 3}的全排列包括{1, 2, 3}、{1, 3, 2}、{2, 1, 3}、{2, 3, 1}、{3, 1, 2}和{3, 2, 1}。 递归算法实现全排列…

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