python 排序算法总结及实例详解

yizhihongxing

Python排序算法总结及实例详解

排序算法是计算机科学中的基本问题之一,它的目的是将一组数据按照一定的顺序排列。在Python中,我们可以使用多种排序算法来对数据进行排序。本文将介绍常见的排序算法及其Python实现,并提供两个示例说明。

常见的排序算法

冒泡排序

冒泡排序是一种简单的排序算法,它的基本思想是通过不断交换相邻的元素,将较大的元素逐渐“冒泡”到数组的末尾。具体来说,冒泡排序的过程如下:

  1. 从数组的第一个元素开始,依次比较相邻的两个元素,如果前一个元素比后一个元素大,则交换它们的位置。
  2. 重复上述步骤,直到数组中的所有元素都被排序。

冒泡排序的时间复杂度为O(n^2),空间复杂度为O(1)。

选择排序

选择排序是一种简单的排序算法,它的基本思想是通过不断选择未排序部分中的最小元素,将其放到已排序部分的末尾。具体来说,选择排序的过程如下:

  1. 在未排序部分中找到最小的元素,将其放到已排序部分的末尾。
  2. 重复上述步骤,直到数组中的所有元素都被排序。

选择排序的时间复杂度为O(n^2),空间复杂度为O(1)。

插入排序

插入排序是一种简单的排序算法,它的基本思想是将未排序部分中的每个元素插入到已排序部分的合适位置。具体来说,插入排序的过程如下:

  1. 将数组的第一个元素视为已排序部分,将其余元素视为未排序部分。
  2. 依次将未排序部分中的每个元素插入到已排序部分的合适位置。
  3. 重复上述步骤,直到数组中的所有元素都被排序。

插入排序的时间复杂度为O(n^2),空间复杂度为O(1)。

快速排序

快速排序是一种高效的排序算法,它的基本思想是通过不断地划分数组,将其分成较小和较大的两部分,然后对这两部分分别进行排序。具体来说,快速排序的过程如下:

  1. 选择一个基准元素,将数组分成两部分,一部分包含所有小于基准元素的元素,另一部分包含所有大于基准元素的元素。
  2. 对这两部分分别进行快速排序。
  3. 重复上述步骤,直到数组中的所有元素都被排序。

快速排序的时间复杂度为O(nlogn),空间复杂度为O(logn)。

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[j+1]:
                arr[j], arr[j+1] = arr[j+1], arr[j]
    return arr

选择排序

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

插入排序

def insertion_sort(arr):
    n = len(arr)
    for i in range(1, n):
        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

快速排序

def quick_sort(arr):
    if len(arr) <= 1:
        return arr
    pivot = arr[len(arr)//2]
    left = [x for x in arr if x < pivot]
    middle = [x for x in arr if x == pivot]
    right = [x for x in arr if x > pivot]
    return quick_sort(left) + middle + quick_sort(right)

示例说明

示例1:使用冒泡排序对数组进行排序

在这个示例中,我们将使用冒泡排序对一个数组进行排序。下面是Python代码:

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

输出结果如下:

[11, 12, 22, 25, 34, 64, 90]

这个结果表示我们成功地使用冒泡排序对数组进行了排序。

示例2:使用快速排序对数组进行排序

在这个示例中,我们将使用快速排序对一个数组进行排序。下面是Python代码:

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

输出结果如下:

[11, 12, 22, 25, 34, 64, 90]

这个结果表示我们成功地使用快速排序对数组进行了排序。

总结

本文介绍了常见的排序算法及其Python实现,包括冒泡排序、选择排序、插入排序和快速排序。我们提供了两个示例,分别使用冒泡排序和快速排序对数组进行排序。排序算法是计算机科学中的基本问题之一,掌握这些算法对于编写高效的程序非常重要。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python 排序算法总结及实例详解 - Python技术站

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

相关文章

  • python中不能连接超时的问题及解决方法

    以下是“Python中不能连接超时的问题及解决方法”的完整攻略,其中包括了问题的定义、解决方法、示例说明以及常见问题解决。 Python中不能连接超时的问题及解决方法 问题的定义 在Python中,我们经常会遇到不能连接超时的问题。这个问题通常是由于网络连接不稳定或目标服务器不可用导致的。当我们尝试连接一个不可用的服务器时,程序会一直等待,到超时。这个问题会…

    python 2023年5月13日
    00
  • Python之ThreadPoolExecutor线程池问题

    下面就来详细讲解“Python之ThreadPoolExecutor线程池问题”的完整攻略。 线程池的作用 线程池是一种常见的并发编程技术,其作用是在需要并发执行任务的场景下,创建一定数量的线程池,并将任务分配到线程池中的线程上执行。这种方式可以有效地降低线程创建和销毁的开销,提高程序的性能和稳定性。 Python中的ThreadPoolExecutor 在…

    python 2023年5月18日
    00
  • 如何使用 Redis 的 Lua 脚本实现分布式锁?

    以下是详细讲解如何使用 Redis 的 Lua 脚本实现分布式锁的完整使用攻略。 Redis 分布式锁简介 Redis 分布式锁是一常用的分布式锁实现方式,可以用于控制分布式系统中的并发访问。 分布式锁的特点如下: Redis 分布式锁是基于 Redis 的 SETNX 命令实现的。 Redis 分布式锁是原子的,保证操作的原子性。 Redis 分布式锁是可…

    python 2023年5月12日
    00
  • Python Tkinter之事件处理详解

    Python Tkinter之事件处理详解 什么是事件? 在Tkinter中,事件指的是用户(或操作系统)执行的一些动作,例如单击鼠标、按下键盘等。Tkinter中的每一种组件都可以绑定多种类型的事件,例如Button组件可以绑定单击事件、双击事件等。 如何绑定事件? 绑定事件的方法是bind,大多数组件都支持该方法。例如,如果我们有一个Button组件,想…

    python 2023年6月13日
    00
  • Python趣味挑战之给幼儿园弟弟生成1000道算术题

    我来为你详细讲解Python趣味挑战之给幼儿园弟弟生成1000道算术题的完整攻略。 1. 确定需求与实现方法 首先,我们需要明确题目的需求,即生成1000道随机的加减法算术题,并将其输出到文件中。根据这个需求,我们可以利用Python的random库来生成随机数,并用循环语句生成1000道算术题,再将其写入文件。 2. 生成随机数 为了生成随机数,我们需要借…

    python 2023年6月5日
    00
  • Python实现输出程序执行进度百分比的方法

    当我们在Python中编写一个长时间运行的程序时,我们通常希望能够输出程序执行进度的百分比,这样我们就可以更清楚地了解程序的状态,以及它还需要多长时间才能完成。以下是几种Python实现输出程序执行进度百分比的方法: 1. 使用tqdm tqdm是Python的一个进度条库,非常适合在Python程序中实现进度条和百分比显示的功能。使用tqdm非常简单,只需…

    python 2023年6月3日
    00
  • python3使用SMTP发送HTML格式邮件

    在Python中,可以使用SMTP库发送电子邮件。本攻略将介绍如何使用SMTP库发送HTML格式的电子邮件。以下是Python3使用SMTP发送HTML格式邮件的详细攻略: 导入SMTP库 首先,需要导入SMTP库。以下是导入SMTP库的示例: import smtplib from email.mime.text import MIMEText from …

    python 2023年5月14日
    00
  • 如何在 3D 图形中为函数绘制曲线 – Python

    【问题标题】:How to plot a curve for a function in a 3D graphic – Python如何在 3D 图形中为函数绘制曲线 – Python 【发布时间】:2023-04-03 23:58:01 【问题描述】: 我有这个功能: z = 0.000855995633558468*x**2 + 0.0102702516…

    Python开发 2023年4月8日
    00
合作推广
合作推广
分享本页
返回顶部