基于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中的递归函数

    讲解Python中的递归函数 在 Python 中,函数可以调用自身,这被称为 递归函数(recursive function)。递归函数是一种实用的方式,可用于简化某些算法或解决某些问题。 递归函数的基本原理 递归函数工作原理:定义一个函数,在内部使用函数自身来做递归调用。递归函数会重复调用自身循环,直到达到某个条件时停止。 递归函数包括两个部分: 基线条…

    python 2023年6月5日
    00
  • python爬取本站电子书信息并入库的实现代码

    本攻略将介绍如何使用Python爬取本站电子书信息并将其存储到数据库中。我们将使用requests库和BeautifulSoup库爬取网页数据,并使用sqlite3库将数据存储到SQLite数据库中。 爬取数据 我们可以使用Python的requests库和BeautifulSoup库爬取本站电子书信息。以下是一个示例代码,用于爬取电子书信息: import…

    python 2023年5月15日
    00
  • python实现获取客户机上指定文件并传输到服务器的方法

    下面是“python实现获取客户机上指定文件并传输到服务器的方法”的完整攻略: 1. 前置要求 在客户机上安装python环境。 确认客户机和服务器都能相互通信。 2. 实现步骤 2.1 密码认证方式 如果服务器端使用密码方式认证,则可以使用paramiko模块实现。具体代码如下: import paramiko transport = paramiko.T…

    python 2023年6月3日
    00
  • python3 unicode列表转换为中文的实例

    下面是关于“Python3 Unicode列表转换为中文”的完整攻略: 问题描述 在Python3中,经常会碰到将Unicode编码的列表转换成中文字符串的需求,如何实现? 解决方案 要将Unicode编码的列表转换成中文字符串,我们可以利用Python中的内置函数chr(),它可以将Unicode编码转换成相应的字符。 具体的实现步骤如下: 定义Unico…

    python 2023年5月31日
    00
  • python通过apply使用元祖和列表调用函数实例

    在Python中,可以使用apply()函数来调用函数,并将元组或列表作为参数传递给函数。apply()函数是pandas库中的一个函数,可以用于对DataFrame中的数据进行操作。下面是详细的使用方法和示例说明。 apply()函数的使用方法 apply()函数的语法如下: DataFrame.apply(func, axis=0, raw=False,…

    python 2023年5月13日
    00
  • Python在字符串中处理html和xml的方法

    在Python中,我们可以使用内置的字符串处理方法来处理HTML和XML。下面是一些常用的方法和示例: 1. 使用内置的html和xml模块 Python内置了html和xml模块,这些模块提供了一些方法来处理HTML和XML字符串。下面是一些示例: 示例1:使用html模块转义HTML字符串 import html html_string = ‘<h…

    python 2023年5月15日
    00
  • Python中使用Beautiful Soup库的超详细教程

    以下是Python中使用BeautifulSoup库的超详细教程: 步骤1:安装BeautifulSoup库 在使用BeautifulSoup库之前,需要安装BeautifulSoup库。以下是一个示例代码: pip install beautifulsoup4 在这个例子中,我们使用pip命令安装了BeautifulSoup库。 步骤2:导入Beautif…

    python 2023年5月14日
    00
  • python爬虫分布式获取数据的实例方法

    我来为您详细讲解 “Python爬虫分布式获取数据的实例方法” 的完整攻略。 什么是Python爬虫分布式? Python爬虫分布式是指将一个爬虫程序在多台计算机上执行,可以大大提高爬虫的性能和效率。通常情况下,Python爬虫分布式使用的工具是Scrapy-Redis,它是Scrapy和Redis结合使用的分布式爬虫框架。 Python爬虫分布式获取数据的…

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