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

yizhihongxing

下面是关于“基于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小程序的完整攻略。 1. 分析问题 问题描述:给定一个18位身份证号码的前17位数字,计算第18位校验位。 对于身份证的校验位计算方法,可以参考以下规律: 身份证校验位是由前17位数字计算得出的,其位数在18个数字中的位置是最后一位。 计算校验位的算法是将前17位数字按照权重(即因子)相乘并相加,所得的结果除以11…

    python 2023年5月23日
    00
  • 浅谈python中常用的excel模块库

    下面是针对“浅谈Python中常用的Excel模块库”的实例教程。 一、常用的Excel模块库简介 Excel是一个非常常用的数据处理工具,对于数据分析和处理有着非常重要的作用。为了更好地使用Python对Excel进行数据处理,我们常常需要使用到Excel模块库。下面是Python中常用的Excel模块库: openpyxl:一个专门为Excel 2010…

    python 2023年5月13日
    00
  • 对python3 一组数值的归一化处理方法详解

    对Python3一组数值的归一化处理方法详解 在数据分析和机器学习领域中,归一化处理是非常常见的一个操作。在Python中,有多种对一组数值进行归一化处理的方法。本篇文章将详细介绍这些方法,并且提供了两个示例来演示这些方法的应用。 什么是归一化 归一化(Normalization)是将数字特征缩放到一个共同的比例范围内的处理方法。归一化不仅可以提升模型的精度…

    python 2023年6月5日
    00
  • 深入浅析Python 中的sklearn模型选择

    深入浅析Python 中的sklearn模型选择 本文将针对Python中的scikit-learn (简称 sklearn),深入浅出的介绍模型选择的相关知识。 什么是模型选择 在机器学习中,模型选取是一个非常重要的工作。机器学习算法存在许多参数需要调整,而这些参数的不同取值会对最终的模型性能产生非常大的影响。模型选择的目的是在不同的模型或不同的参数集上进…

    python 2023年6月2日
    00
  • python tkinter控件布局项目实例

    下面就来详细讲解“python tkinter控件布局项目实例”的完整攻略,包含以下几个部分: 熟悉控件和布局 页面布局设计和代码实现 示例说明 1. 熟悉控件和布局 在使用 tkinter 进行页面布局时,我们需要熟悉以下控件和布局: 控件 Label:标签控件,用于显示文本或图片。 Entry:单行文本框控件,用于输入单行文本。 Button:按钮控件,…

    python 2023年6月13日
    00
  • Python编程无师自通:专业程序员的养成-术语表

    术语表 第一章 FizzBuzz 用来编程面试中筛选候选者的测试。 操作系统 扮演计算机物理组件与人之间的中间人的一个程序。 图形用户界面(GUI) 操作系统的一部分,用户在屏幕上看到的内容。 开源 软件不归某个公司或个人所有,而是由一群志愿者维护。 Windows 微软推出的操作系统。 UNIX 发明于20世纪70年代的一种操作系统,苹果的OS X是UNI…

    python 2023年5月4日
    00
  • Python:通配符查找、拷贝文件的操作

    在Python中,我们可以使用通配符来查找和拷贝文件。本文将详细介绍如何使用通配符在Python中查找和拷贝文件。 通配符查找文件 在Python中,我们可以使用glob模块来查找文件。glob模块提供了一个函数glob(),它接受一个通配符模式作为参数,并返回匹配该模式的所有文件的列表。 以下是一个示例: import glob files = glob.…

    python 2023年5月14日
    00
  • Python中Dict两种实现的原理详解

    Python中Dict两种实现的原理详解 在Python中,字典(Dict)被广泛使用。Python使用了两种不同的技术来实现Dict,分别为散列表(Hash Table)和有序字典(Ordered Dict)。本篇攻略将详细讲解Python中Dict两种实现的原理。 散列表(Hash Table) 散列表(Hash Table)是一种用于快速查找的数据结构…

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