Python实现常见的算法排序

本文将从多个方面对Python实现常见的算法排序进行详细阐述。

一、冒泡排序

冒泡排序是一种简单直观的排序算法,它重复比较相邻的两个元素,如果顺序错误就交换位置,直到整个数组排序完成。

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

arr = [5, 9, 3, 1, 2]
sorted_arr = bubble_sort(arr)
print(sorted_arr)

上述代码实现了冒泡排序的功能。首先,声明了一个bubble_sort函数,它接受一个待排序的数组作为参数。然后,利用两个嵌套的循环遍历数组,并通过比较相邻元素的大小,交换位置以实现排序。最后,返回排序后的数组。

冒泡排序的时间复杂度是O(n^2),在最坏情况下需要进行n*(n-1)/2次比较和交换操作。

二、插入排序

插入排序是一种简单且高效的排序算法,它将待排序的元素按照顺序一个一个地插入到已经排序好的部分中。

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

arr = [5, 9, 3, 1, 2]
sorted_arr = insertion_sort(arr)
print(sorted_arr)

上述代码实现了插入排序的功能。首先,声明了一个insertion_sort函数,它接受一个待排序的数组作为参数。然后,通过一个外层循环遍历整个数组,将每个元素插入到已经排序好的部分中。内层循环用来找到正确的插入位置,并移动较大的元素以腾出空间。最后,返回排序后的数组。

插入排序的时间复杂度是O(n^2),在最坏情况下需要进行n*(n-1)/2次比较和移动操作。

三、选择排序

选择排序是一种简单直观的排序算法,它每次从待排序的数组中选择最小(或最大)的元素,然后将其放到已经排序好的部分的末尾。

def selection_sort(arr):
    n = len(arr)
    for i in range(n-1):
        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 = [5, 9, 3, 1, 2]
sorted_arr = selection_sort(arr)
print(sorted_arr)

上述代码实现了选择排序的功能。首先,声明了一个selection_sort函数,它接受一个待排序的数组作为参数。然后,通过两个嵌套的循环遍历整个数组,每次找到当前未排序部分的最小元素,并将其与当前位置元素进行交换。最后,返回排序后的数组。

选择排序的时间复杂度是O(n^2),在最坏情况下需要进行n*(n-1)/2次比较和交换操作。

四、快速排序

快速排序是一种高效的排序算法,它采用分治的思想,通过选取一个基准元素,将数组分成两个子数组,然后对子数组进行递归排序。

def quick_sort(arr):
    if len(arr) <= 1:
        return arr
    pivot = arr[len(arr)//2]
    left, right, equal = [], [], []
    for num in arr:
        if num < pivot:
            left.append(num)
        elif num > pivot:
            right.append(num)
        else:
            equal.append(num)
    return quick_sort(left) + equal + quick_sort(right)

arr = [5, 9, 3, 1, 2]
sorted_arr = quick_sort(arr)
print(sorted_arr)

上述代码实现了快速排序的功能。首先,声明了一个quick_sort函数,它接受一个待排序的数组作为参数。然后,选择一个基准元素(本例中选择中间位置元素),将数组按照基准元素分成三个部分:小于基准元素的部分、等于基准元素的部分和大于基准元素的部分。接着,对左右两个子数组进行递归排序,并将排序后的子数组与等于基准元素的部分合并。最后,返回排序后的数组。

快速排序的平均时间复杂度是O(nlogn),最坏情况下可以达到O(n^2),但概率很小。

五、归并排序

归并排序是一种高效的排序算法,它采用分治的思想,将数组不断划分成更小的部分进行排序,然后将排序好的部分合并。

def merge_sort(arr):
    if len(arr) <= 1:
        return arr
    mid = len(arr) // 2
    left = merge_sort(arr[:mid])
    right = merge_sort(arr[mid:])
    return merge(left, right)

def merge(left, right):
    result = []
    i, j = 0, 0
    while i < len(left) and j < len(right):
        if left[i] < right[j]:
            result.append(left[i])
            i += 1
        else:
            result.append(right[j])
            j += 1
    result.extend(left[i:])
    result.extend(right[j:])
    return result

arr = [5, 9, 3, 1, 2]
sorted_arr = merge_sort(arr)
print(sorted_arr)

上述代码实现了归并排序的功能。首先,声明了一个merge_sort函数,它接受一个待排序的数组作为参数。然后,通过递归将数组不断划分成更小的部分,直到只剩下一个元素。接着,将排序好的子数组进行合并,这里使用了一个名为merge的辅助函数来实现。最后,返回排序后的数组。

归并排序的时间复杂度是O(nlogn),它是一种稳定的排序算法。

六、总结

本文详细介绍了Python实现常见的算法排序。冒泡排序通过相邻元素的比较和交换来实现排序;插入排序通过将元素逐个插入到已排序部分的适当位置来实现排序;选择排序通过选择最小(或最大)元素并将其放到已排序部分的末尾来实现排序;快速排序通过选取基准元素,并将数组分成两个子数组递归排序来实现排序;归并排序通过不断划分和合并数组来实现排序。

每种排序算法都有其特点和适用场景,选择合适的算法可以提高排序效率。在实际开发中,要根据具体需求选择适当的排序算法。

原创文章,作者:BVAL,如若转载,请注明出处:https://www.beidandianzhu.com/g/2200.html

(0)
BVAL的头像BVAL
上一篇 2024-12-17
下一篇 2024-12-17

相关推荐

  • 网站关键词更新监控 Python实现

    关键词更新监控是一种用于追踪和监测网站关键词在搜索引擎中的排名和变化的方法。使用Python编程语言,我们可以通过网站爬虫和数据处理技术,实现自动化的网站关键词更新监控系统。 一、…

    程序猿 2024-12-28
  • Python中什么时候用双引号为中心

    双引号和单引号在Python中都可以用于表示字符串,因此在选择使用哪种引号时,应该根据具体的情况来考虑。下面将从多个方面来详细阐述在Python中何时使用双引号。 一、定义字符串 …

    程序猿 2024-12-20
  • Python陪伴的价值

    Python作为一门功能强大且易于学习的编程语言,不仅仅在技术层面上能为开发工程师带来很多好处,还能在各种场景下成为开发者的良师益友。本文将从多个方面来阐述Python陪伴给开发工…

    程序猿 2024-12-22
  • 用python画对联

    安装必要的仓库 需要安装Pillow库,然后再使用Python进行绘图。Pillow是Python的一个图像处理库,可以用来创建和编辑图像。可通过pip命令安装: pip inst…

  • Python输出众数

    众数是统计学中的一个重要概念,指的是给定一组数据中出现次数最多的数值。在Python中,我们可以使用多种方法来输出众数。本文将从多个方面对Python输出众数进行详细的阐述。 一、…

    程序猿 2024-12-17
  • Python自动发文件

    本文将从多个方面详细阐述Python自动发文件的相关内容。 一、实现邮件自动发送功能 Python提供了多种库和模块来实现邮件的自动发送功能,其中比较常用的是smtplib和ema…

    程序猿 2024-12-25
  • Python实现简易采集爬虫

    对于爬取网页上的数据,采集爬虫是一个非常常见的方法。在Python中,我们可以通过一些库(如Requests、BeautifulSoup、Scrapy等)轻松实现一个简易的采集爬虫…

  • Python程序的运用过程

    Python是一种高级编程语言,它被广泛用于各种领域的软件开发。本文将详细阐述Python程序的运用过程,包括Python的安装、开发环境的搭建、基本语法的使用以及实际应用示例。 …

    程序猿 2024-12-24
  • Python中elif语句常见错误及解决方法

    在Python编程中,elif语句是用于多条件判断的关键字之一。然而,很多初学者在使用elif语句时经常遇到各种错误。本文将从多个方面详细阐述Python中elif语句常见错误以及…

    程序猿 2024-12-17
  • Python循环生成新DataFrame

    本文将详细讨论如何使用Python循环生成新的DataFrame。我们将从以下几个方面进行阐述。 一、基础介绍 在开始之前,让我们先了解一下DataFrame是什么。DataFra…

    程序猿 2024-12-20

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

分享本页
返回顶部