Python排序算法实例代码

下面就给您详细讲解“Python排序算法实例代码”的完整攻略:

一、排序算法简介

排序算法(sorting algorithm)是计算机程序中最基础的算法之一,它是指将一组无序的数据元素,按照某种规则进行排列的过程。

常见的排序算法包括冒泡排序、选择排序、插入排序、快速排序、归并排序等,它们的实现方式不同,但总体思路都是通过比较和交换元素位置来完成排序的。

在Python中,也有很多内置的排序函数,比如sort()、sorted()等。但是,理解和掌握基本的排序算法,对于编写高效的程序和解决实际问题非常有帮助。

二、Python排序算法实例代码

下面,我们将分别展示冒泡排序、选择排序和插入排序的Python实现代码。

1. 冒泡排序

冒泡排序(Bubble Sort)是最基础的排序算法之一,它的基本思想是通过相邻元素的比较和交换,使得每一趟排序都能确定一个当前未排序部分的最大值。

冒泡排序的时间复杂度为O(n^2),不适用于大规模数据。

以下是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

代码中,外层循环遍历未排序部分,内层循环遍历相邻的元素,并进行比较和交换。

2. 选择排序

选择排序(Selection Sort)也是一种简单的排序算法,它的基本思想是通过不断选择未排序部分的最小值,并将其放到已排序部分的最后面,最终实现整个序列的排序。

选择排序的时间复杂度为O(n^2),不适用于大规模数据。

以下是Python实现的选择排序代码:

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
        if min_index != i:
            arr[i], arr[min_index] = arr[min_index], arr[i]
    return arr

代码中,外层循环遍历未排序部分,内层循环遍历未排序部分的元素,并记录最小值的索引,最后将最小值与未排序部分的第一个元素进行交换。

3. 插入排序

插入排序(Insertion Sort)也是一种简单的排序算法,它的基本思想是通过逐步构建有序序列,不断将未排序部分的元素插入到已排序部分的合适位置,从而实现整个序列的排序。

插入排序的时间复杂度为O(n^2),适用于小规模数据。

以下是Python实现的插入排序代码:

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

代码中,外层循环遍历未排序部分,内层循环遍历已排序的元素,并将当前元素插入到合适的位置。

三、示例说明

下面,我们举两个例子来说明如何应用以上排序算法。

1. 按照成绩进行排序

假设我们有一个由学生姓名和成绩组成的列表,现在要按照成绩从高到低进行排序。代码如下:

students = [('Tom', 85), ('Bob', 92), ('Mary', 78), ('Jerry', 99)]

# 按照成绩从高到低排序
scores = [s[1] for s in students]
sorted_scores = bubble_sort(scores)[::-1]
sorted_students = [(students[scores.index(score)][0], score) for score in sorted_scores]
print(sorted_students)

代码中,我们先将学生成绩提取出来,然后进行排序,最后再根据排序结果重新构造学生列表。

输出结果为:

[('Jerry', 99), ('Bob', 92), ('Tom', 85), ('Mary', 78)]

2. 丢失的数字

给定一个由0~n之间的n个不同的整数组成的列表,其中有一个数字丢失了,现在要找到它。代码如下:

nums = [3, 1, 0, 5, 2, 7, 6, 4]

# 找到丢失的数字
sorted_nums = selection_sort(nums)
for i in range(len(sorted_nums)):
    if sorted_nums[i] != i:
        print(i)
        break

代码中,我们先对列表进行从小到大的排序,然后依次检查每个数字,找到第一个与下标不一致的数字即为缺失的数字。

输出结果为:

说明:由于这个列表中丢失了数字8,因此最终输出结果为空。

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

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

相关文章

  • Python urllib3软件包的使用说明

    这里是关于 Python urllib3 软件包的使用说明的完整攻略。 Python urllib3 软件包的使用说明 简介 Python urllib3 是一个HTTP客户端库,具有以下特性: 线程安全且无需全局锁定。 基于HTTP/1.1协议,支持长连接和连接池。 支持文件上传。 自动解码响应的gzip和deflate压缩。 完整支持unicode(内含…

    python 2023年6月3日
    00
  • python安装dlib库报错问题及解决方法

    当我们在Python编程过程中需要使用dlib库时,可能会遇到各种安装错误。以下是解决Python安装dlib库报错问题及解决方法的完整攻略: 1. 安装依赖项 在安装dlib之前,需要安装一些依赖项。这些依赖项包括cmake、boost和X11。我们可以使用以下命令来安装这依赖: sudo apt-get install build-essential c…

    python 2023年5月13日
    00
  • 浅谈python爬虫使用Selenium模拟浏览器行为

    浅谈Python爬虫使用Selenium模拟浏览器行为 在本攻略中,我们将介绍如何使用Python爬虫使用Selenium模拟浏览器行为。我们将使用Python的Selenium库来实现这个过程。 步骤1:安装Selenium库 使用以下命令可以安装Selenium库: pip install selenium 步骤2:安装浏览器驱动 使用Selenium库…

    python 2023年5月15日
    00
  • 使用 XMLHttpRequest() 时如何在 python 中接收 POST 数据

    【问题标题】:How to receive POST data in python when using XMLHttpRequest()使用 XMLHttpRequest() 时如何在 python 中接收 POST 数据 【发布时间】:2023-04-07 07:10:01 【问题描述】: 我有两个关于使用 XMLHttpRequest() 时接收数据的…

    Python开发 2023年4月8日
    00
  • python 图像判断,清晰度(明暗),彩色与黑白实例

    我来为您详细讲解一下“python 图像判断,清晰度(明暗),彩色与黑白实例”的完整攻略。 1. 图像判断 在 Python 中可通过 Pillow 库实现对图片的读取,经过处理后进行判断。关于图片处理可以查看 Pillow 的文档。 具体攻略如下: 安装 Pillow 库 pip install Pillow 导入相关库 from PIL import I…

    python 2023年5月18日
    00
  • 计算机二级python学习教程(3) python语言基本数据类型

    计算机二级python学习教程(3) python语言基本数据类型 本教程将着重介绍Python语言中的基本数据类型,包括数字、字符串、布尔值、列表、元组和字典等,并且会通过简单的示例让大家更好地理解这些数据类型的使用。 数字类型 Python中的数字类型包括整数和浮点数。其中整数类型是没有小数部分的数字。在Python中,整数可以表示为十进制、二进制、八进…

    python 2023年5月20日
    00
  • 详解Python namedtuple的优点

    Python中的namedtuple是一个非常有用的数据类型,它允许用户为元组中的每个元素定义名称,并用这些名称来引用元素。由于具有元组的不可变性,namedtuple比字典更加高效。 以下是namedtuple的一些优点: 内存效率:namedtuple比类更轻巧,因为它不需要创建新的__class__来实现。 速度快:与对象属性进行访问相比,namedt…

    python-answer 2023年3月25日
    00
  • PyQt5爬取12306车票信息程序的实现

    PyQt5爬取12306车票信息程序的实现 本文将详细讲解如何使用PyQt5和Python爬取12306车票信息。我们将从环境配置开始,一步步地介绍如何使用PyQt5和Python实现爬取12306车票信息的程序。 环境配置 在使用PyQt5和Python爬取12306车票信息之前,我们需要先进行环境配置。以下是环境配置的步骤: 安装Python 可以在Py…

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