基于python的七种经典排序算法(推荐)

下面是关于“基于Python的七种经典排序算法”的完整攻略。

1. 排序算法简介

排序算法是一种将一组数据按照特定顺序排列的算法。在计算机科学中,常见的排序算法包括冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序和堆排序等。

2. Python实现七种经典排序算法

2.1泡排序

冒泡排序是一种通过交换相邻元素来排序的算法。在Python中,我们可以使用以下代码实现冒泡排序:

def bubble_sort(arr):
    n = len(arr)
    for i in range(n):
        for j in range(0, n-i-1):
            if arr[j] > arr+1]:
                arr[j], arr[j+1] = arr[j+1], arr[j]
    return arr

在这个代码中,我们使用两个嵌套的环来实现冒泡排序外层循环用于遍历整个数组,内层循环用于比较相邻元素并交换它们的位置。最后,我们返回后的数组。

下面是一个使用冒泡排序的示例:

arr = [64, 34, 25, 12, 22, 11, 90]
print(bubble_sort(arr))

在这个示例中,我们使用 bubble_sort() 函数对数组 [64, 34, 25, 12, 22, 11, 90] 进行排序,并打印排序后的结果。

2.2 快速排序

快速排序是一种通过分治法来排序的算法。在Python中,我们可以使用以下代码实现快速排序:

def quick_sort(arr):
    if len(arr) <= 1:
        return arr
    pivot = arr[0]
    left = []
    right = []
    for i in range(1, len(arr)):
        if arr[i] < pivot:
            left.append(arr[i])
        else:
            right.append(arr[i])
    return quick_sort(left) + [pivot] + quick_sort(right)

在这个代码中,我们使用递归来实快速排序。我们首先选择一个基准元素 pivot,然后将数组分成两个部分,一部分包含小于 pivot 的元素,另一部分包含大于等于 pivot 的元素。最后,我们递归地对左右两个部分进行排序,并将它们和 pivot 组合在一起返回。

下面是一个使用快速排序的示例:

arr = [64, 34, 25, 12, 22, 11, 90]
print(quick_sort(arr))

在这个示例中,我们使用 quick_sort() 函数对数组 [64, 34, 25, 12, 22, 11 90] 进行排序,并打印排序后的结果。

2.3 选择排序

选择排序是一种通过选择最小元素来排序的算法。在Python中,我们可以使用以下代码实现选择排序:

def selection_sort(arr):
    n = len(arr)
    for i in range(n):
        min_index = i
        for j in range(i+1, n):
            if arr[j] < arr[min_index]:
                min_index = j
        arr[i], arr[min_index] = arr[min_index], arr[i]
    return arr

在这个代码中,我们使用两个嵌套的循环来实现选择排序。外层循环用于遍历整个数组,内层循环用于选择最小元素并将其放在正确的位置上。最后,我们返回排序后的数组。

下面是一个使用选择排序的示例:

arr = [64, 34, , 12, 22, 11, 90]
print(selection_sort(arr))

在这个示例中,我们使用 selection_sort() 函数对数组 [64, 34, 25, 12, 22, 11, 90] 进行排序,并打印排序后的。

2.4 插入排序

插入排序是一种通过将元素插入已排序的数组中来排序的算法。在Python中,我们可以使用以下代码实现插入排序:

def insertion_sort(arr):
    for i in range(1, len(arr)):
        key = arr[i]
        j = i - 1
        while j >= 0 and key < arr[j]:
            arr[j+1] = arr[j]
            j -= 1
        arr[j+1] = key
    return arr

在这个代码中,我们使用一个循环来实现插入排序。我们首先将第一个元素视为已排序的数组,然后将后续元素插入到已排序的数组中。最后,我们返回排序后的数组。

下面是一个使用插入排序的示例:

arr = [64, 34, 25, 12, 22, 11, 90]
print(insertion_sort(arr))

在这个示例中,我们使用 insertion_sort() 函数对数组 [64, 34, 25, 12, 22, 11, 90] 进行排序,并打印排序后的结果。

2.5 希尔排序

希尔排序是一种通过分组插入排序来排序的算法。在Python中,我们可以使用以下代码实现希尔排序:

def shell_sort(arr):
    n = len(arr)
    gap = n // 2
    while gap > 0:
        for i in range(gap, n):
            temp = arr[i]
            j = i
            while j >= gap and arr[j-gap] > temp:
                arr[j] = arr[j-gap]
                j -= gap
            arr[j] = temp
        gap //= 2
    return arr

在这个代码中,我们使用一个循环来实现希尔排序。我们首先将数组分成若干个子数组,然后对每个子数组进行插入排序。最后,我们逐步缩小子数组的大小,直到子数组大小为1,完成排序。

下面是一个使用希尔排序的示例:

arr = [64, 34, 25, 12, 22, 11, 90]
print(shell_sort(arr))

在这个示例中,我们使用 shell_sort() 函数对数组 [64, 34, 25, 12, 22, 11, 90] 进行排序,并打印排序后的结果。

2.6 归并排序

归并排序是一种通过分治法来排序的算法。在Python中,我们可以使用以下代码实现归并排序:

def merge_sort(arr):
    if len(arr) > 1:
        mid = len(arr) // 2
        left = arr[:mid]
        right = arr[mid:]
        merge_sort(left)
        merge_sort(right)
        i = j = k = 0
        while i < len(left) and j < len(right):
            if left[i] < right[j]:
                arr[k] = left[i]
                i += 1
            else:
                arr[k] = right[j]
                j += 1
            k += 1
        while i < len(left):
            arr[k] = left[i]
            i += 1
            k += 1
        while j < len(right):
            arr[k] = right[j]
            j += 1
            k += 1
    return arr

在这个代码中,我们使用递归来实现归并排序。我们首先将数组分成两个部分,然后递归地对左右两个部分进行排序。最后,我们将左右两个部分合并起来,并返回排序后的数组。

下面是一个使用归并排序的示例:

arr = [64, 34, 25, 12, 22, 11, 90]
print(merge_sort(arr))

在这个示例中,我们使用 merge_sort() 函数对数组 [64, 34, 25, 12, 22, 11, 90] 进行排序,并打印排序后的结果。

2.7 堆排序

堆排序是一种通过堆数据结构来排序的算法。在Python中,我们可以使用以下代码实现堆排序:

def heapify(arr, n, i):
    largest = i
    l = 2 * i + 1
    r = 2 * i + 2
    if l < n and arr[i] < arr[l]:
        largest = l
    if r < n and arr[largest] < arr[r]:
        largest = r
    if largest != i:
        arr[i], arr[largest] = arr[largest], arr[i]
        heapify(arr, n, largest)

def heap_sort(arr):
    n = len(arr)
    for i in range(n//2-1, -1, -1):
        heapify(arr, n, i)
    for i in range(n-1, 0, -1):
        arr[i], arr[0] = arr[0], arr[i]
        heapify(arr, i, 0)
    return arr

在这个代码中,我们使用堆数据结构来实现堆排序。我们首先将数组转换成一个最大堆,然后将堆顶元素与最后一个元素交换,然后重新构建最大堆。最后,我们返回排序后的数组。

下面是一个使用堆排序的示例:

arr = [64, 34, 25, 12, 22, 11, 90]
print(heap_sort(arr))

在这个示例中,我们使用 heap_sort() 函数对数组 [64, 34, 25, 12, 22, 11, 90] 进行排序,并打印排序后的结果。

3. 总结

排序算法是一种将一组数据按照特定顺序排列的算法。在Python中,常见的算法包括冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序和堆排序等。在实现这些算法时,我们使用相应的代码来比较和交换元素、递归地分治数组等。最后,我们可以返回排序后的数组。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:基于python的七种经典排序算法(推荐) - Python技术站

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

相关文章

  • Python中list列表的一些进阶使用方法介绍

    Python中list列表的一些进阶使用方法介绍 在Python中,列表(List)是一种有序的集合,可以存储任意类型的数据,包数字、字符串、甚至是其他列表。除了基的创建、访问、添加、删除、排序等操作,文将介绍Python中list列表的一些进阶使用方法,包括列表推导式、片、zip()函数等,并提供两个实例。 列表推导式 列表推导式是一种简洁的创建列表的方式…

    python 2023年5月13日
    00
  • Python PyWebIO实现网页版数据查询器

    下面我将详细讲解如何用Python PyWebIO实现网页版数据查询器。 Python PyWebIO实现网页版数据查询器攻略 1. 简介 PyWebIO是一个可以在浏览器中运行的Python库,专注于Web应用程序的开发和交互。使用PyWebIO可以轻松地将Python脚本转换为交互式Web应用程序,不需要任何前端开发知识。 在本攻略中,我们将使用PyWe…

    python 2023年6月6日
    00
  • python多线程扫描端口(线程池)

    下面我将详细讲解“python多线程扫描端口(线程池)”的完整攻略。 线程池的概念 线程池是一种应对高并发、高频率任务的一种解决方案,它将线程复用起来,减少了创建、销毁线程的开销,从而提高了程序的效率。 当我们需要同时进行多个扫描时,就需要采用多线程的方式来进行。而线程池则是一种比较好用的多线程技术,它可以控制线程的数量,避免资源的浪费,让线程在需要时自动重…

    python 2023年5月19日
    00
  • 利用Python实现简单的相似图片搜索的教程

    利用Python实现简单的相似图片搜索的教程 前言 本教程主要介绍如何使用Python实现简单的相似图片搜索。相似图片搜索是一种常见的图像处理任务,它可以在海量图片中找到和给定图片近似相似的图片。本文将介绍如何使用Python中的OpenCV库实现相似图片搜索。如果您想使用Python实现这个任务,您需要掌握一些基本的编程知识,包括Python语言、图像处理…

    python 2023年5月18日
    00
  • Python编码爬坑指南(必看)

    下面我将详细讲解一下Python编码爬坑指南的完整攻略。 概述 这篇攻略主要是针对Python爬虫过程中遇到的编码问题进行的总结和解析。代码的运行环境是Python3.x,其他版本的Python可能会有一些差异。本文会从以下几个方面进行讲解: 编码的概念及常用编码格式 编码问题的解决方法 案例分析 什么是编码 编码是指把一种字符集中的字符,按照某种规律,映射…

    python 2023年5月31日
    00
  • python3 中的几种除法介绍,小数的不同显示

    下面是 Python3 中几种除法的介绍: 1. Python3 中的两种除法 在 Python3 中,除法主要分为两种类型:整数除法和浮点数除法。 整数除法(//):这种除法会得到一个整数解,这个解是向下取整的商,结果不包含小数部分。 浮点数除法(/):这种除法会得到精确的商,结果一定包含小数部分,可以是浮点数型的。 下面分别对这两种除法做详细说明: a.…

    python 2023年6月3日
    00
  • Python基础详解之邮件处理

    Python基础详解之邮件处理 简介 本篇文章主要介绍如何使用Python处理邮件,包括邮件的发送和接收,以及邮件的解析和处理。为了更好地理解,我们将分别从三个方面来阐述: 发送邮件 接收邮件 解析和处理邮件 发送邮件 发送邮件是指通过Python向收件人发送邮件的过程。Python中有多种发送邮件的方式,此处我们介绍使用smtplib库实现发送邮件。 示例…

    python 2023年6月5日
    00
  • 十道Python面试最常问到的问题

    下面是“十道Python面试最常问到的问题”的完整攻略: 1. 解释Python中的GIL(全局解释锁)是什么? GIL是Python解释器中的一个重要概念,它实际上是Python多线程并发的一个限制。在同一时间内,只有一个线程在执行Python字节码。当一个线程处于执行状态时,它会占用GIL,其他线程就不能执行Python字节码了,它们只能等待当前线程释放…

    python 2023年5月14日
    00
合作推广
合作推广
分享本页
返回顶部