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日

相关文章

  • C#中使用基数排序算法对字符串进行排序的示例

    下面是使用基数排序算法对字符串进行排序的完整攻略。 什么是基数排序算法? 基数排序算法是一种非比较排序算法,它先按照低位进行排序,然后再按照高位进行排序。在对一组字符串进行排序时,可以先按照字符串的最后一位进行排序,然后再按照倒数第二位进行排序,逐步地按照每一位进行排序,最终完成整组字符串的排序。 C#中实现基数排序算法的步骤 在 C# 中实现基数排序算法需…

    算法与数据结构 2023年5月19日
    00
  • Go语言展现快速排序算法全过程的思路及代码示例

    这里是关于“Go语言展现快速排序算法全过程的思路及代码示例”的详细攻略。 什么是快速排序算法 快速排序算法是一种基于比较的排序算法,它通过选择一个基准元素,将数组分为两部分然后递归地对这两部分进行排序,最终完成对整个数组的排序。快速排序算法的时间复杂度为 O(nlogn) 平均情况下,但是在最坏情况下会退化为 O(n^2)。 快速排序算法的实现思路 下面是快…

    算法与数据结构 2023年5月19日
    00
  • c++实现二路归并排序的示例代码

    C++实现二路归并排序是一种常用的排序算法,本文将介绍该算法的详细实现过程,并提供一些示例说明。 一、简述二路归并排序的原理 二路归并排序是一种基于分治思想的排序算法。核心思想是把一个待排序的序列,不断地拆分为两个子序列,直至每个子序列只剩下一个元素,然后利用递归思想将这些子序列不断地两两合并,最终得到一个有序的序列。 二、C++实现二路归并排序的示例代码 …

    算法与数据结构 2023年5月19日
    00
  • JS深入学习之数组对象排序操作示例

    《JS深入学习之数组对象排序操作示例》是一篇介绍JavaScript数组排序相关操作的文章,主要包含以下内容: 1. 数组对象排序 1.1 sort()方法 sort()方法是JavaScript中的一个数组排序方法,可以用于对数组的元素进行排序。sort()方法可以接收一个可选的排序函数作为参数,通过这个函数,我们可以实现自定义的排序规则。 语法为:arr…

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

    冒泡排序算法详解及实例 什么是冒泡排序算法 冒泡排序是一种很基础的排序算法,它通过从序列的一端开始,依次比较相邻两个元素的大小,如果它们的顺序不对,就交换它们的位置,直到把整个序列排序完成。冒泡排序算法的时间复杂度为O(n^2),所以它并不适合排序规模很大的序列。 冒泡排序算法的实现 冒泡排序算法的实现很简单,其核心代码如下: void bubble_sor…

    算法与数据结构 2023年5月19日
    00
  • 详解C++实现链表的排序算法

    详解C++实现链表的排序算法 算法介绍 链表是一种常见的数据结构,在实际使用中常常需要对链表进行排序。本文将介绍在C++中实现链表排序的几种算法,包括插入排序,归并排序和快速排序。 插入排序 插入排序(Insertion Sort)是一种简单直观的排序算法。具体实现过程如下: 遍历链表,取下一个节点作为插入节点。 如果当前节点不小于插入节点,则将插入节点插入…

    算法与数据结构 2023年5月19日
    00
  • C++九种排序具体实现代码

    针对“C++九种排序具体实现代码”的攻略,我将从以下几个方面进行详细讲解: 九种排序算法介绍 排序算法实现代码示例 一些注意事项 九种排序算法介绍 在介绍具体代码实现之前,我们先来了解一下九种排序算法的特点。 冒泡排序(Bubble Sort):通过不断交换相邻的两个元素,将大的元素逐渐往后移动,最后得到有序序列。 快速排序(Quick Sort):通过设定…

    算法与数据结构 2023年5月19日
    00
  • 如何用C++实现A*寻路算法

    一、什么是A*寻路算法? A寻路算法(A search algorithm),也叫A算法,是一种启发式搜索算法,常用于求解路径规划问题。A算法结合了Dijkstra算法和启发式搜索的优点,能够在保证找到最短路径的情况下,大大降低搜索的时间和空间消耗。 二、A*寻路算法的原理 1.最短路径 在计算机科学中,最短路径问题是指两点之间的所有路径中,经过的边或节点数…

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