Python教程:使用Python实现冒泡排序和快速排序

简介: 排序算法根据其实现原理和效率可以分为多种类型,包括冒泡排序、选择排序、插入排序、归并排序、快速排序等。这些算法在不同的场景下具有不同的优劣势,需要根据实际需求选择合适的算法。

 1.冒泡排序


1.1介绍

冒泡排序(Bubble Sort)是一种简单直观的排序算法,它重复地遍历待排序序列,每次比较相邻的两个元素,如果它们的顺序错误就交换它们。经过一轮的遍历,最大(或最小)的元素就像气泡一样“冒”到了最后,因此得名冒泡排序。

1.2冒泡排序算法的原理

冒泡排序算法的基本原理如下:

  1. 从第一个元素开始,依次比较相邻的两个元素,如果顺序不正确则交换它们。
  2. 经过第一轮遍历后,最大(或最小)的元素被“冒泡”到了最后一个位置。
  3. 重复以上步骤,每次遍历都会将剩余未排序部分的最大(或最小)元素“冒泡”到合适的位置。
  4. 直到所有元素都排好序为止。

1.3Python 实现冒泡排序算法

下面是用 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]
# 示例
arr = [64, 34, 25, 12, 22, 11, 90]
bubble_sort(arr)
print("排序后的数组:", arr)  # 输出: [11, 12, 22, 25, 34, 64, 90]

image.gif

2.快速排序


2.1介绍

快速排序(Quick Sort)是一种高效的排序算法,由英国计算机科学家 Tony Hoare 在 1960 年提出。它是一种分治算法,通过选择一个基准元素,将数组分成两个子数组,小于基准的放在左边,大于基准的放在右边,然后对子数组递归地应用快速排序算法,最终使整个数组有序。

2.2 快速排序算法的原理

快速排序算法的基本原理如下:

  1. 选择一个基准元素(通常选择数组的第一个元素)。
  2. 使用两个指针,一个从数组的起始位置向后移动(称为左指针),一个从数组的末尾向前移动(称为右指针)。
  3. 左指针不断向右移动,直到找到一个大于基准元素的元素,右指针不断向左移动,直到找到一个小于基准元素的元素。
  4. 如果左指针小于等于右指针,则交换它们所指向的元素,并继续移动指针;否则,停止移动。
  5. 重复以上步骤,直到左指针超过右指针。
  6. 将基准元素与右指针所指向的元素交换位置,此时基准元素左边的元素都小于等于基准元素,右边的元素都大于等于基准元素。
  7. 分别对基准元素左边和右边的子数组递归地应用快速排序算法。

2.3 Python 实现快速排序算法

下面是用 Python 实现快速排序算法的代码:

def quick_sort(arr):
    if len(arr) <= 1:
        return arr
    else:
        pivot = arr[0]
        less_than_pivot = [x for x in arr[1:] if x <= pivot]
        greater_than_pivot = [x for x in arr[1:] if x > pivot]
        return quick_sort(less_than_pivot) + [pivot] + quick_sort(greater_than_pivot)
# 示例
arr = [64, 34, 25, 12, 22, 11, 90]
sorted_arr = quick_sort(arr)
print("排序后的数组:", sorted_arr)  # 输出: [11, 12, 22, 25, 34, 64, 90]

image.gif


目录
相关文章
|
8天前
|
Linux 网络安全 Python
linux centos上安装python3.11.x详细完整教程
这篇文章提供了在CentOS系统上安装Python 3.11.x版本的详细步骤,包括下载、解压、安装依赖、编译配置、解决常见错误以及版本验证。
63 1
linux centos上安装python3.11.x详细完整教程
|
2月前
|
数据采集 存储 搜索推荐
打造个性化网页爬虫:从零开始的Python教程
【8月更文挑战第31天】在数字信息的海洋中,网页爬虫是一艘能够自动搜集网络数据的神奇船只。本文将引导你启航,用Python语言建造属于你自己的网页爬虫。我们将一起探索如何从无到有,一步步构建一个能够抓取、解析并存储网页数据的基础爬虫。文章不仅分享代码,更带你理解背后的逻辑,让你能在遇到问题时自行找到解决方案。无论你是编程新手还是有一定基础的开发者,这篇文章都会为你打开一扇通往数据世界的新窗。
|
7天前
|
Python Windows
python入门保姆级教程 | 13
python入门保姆级教程 | 13
|
9天前
|
存储 JSON API
实战派教程!Python Web开发中RESTful API的设计哲学与实现技巧,一网打尽!
在数字化时代,Web API成为连接前后端及构建复杂应用的关键。RESTful API因简洁直观而广受欢迎。本文通过实战案例,介绍Python Web开发中的RESTful API设计哲学与技巧,包括使用Flask框架构建一个图书管理系统的API,涵盖资源定义、请求响应设计及实现示例。通过准确使用HTTP状态码、版本控制、错误处理及文档化等技巧,帮助你深入理解RESTful API的设计与实现。希望本文能助力你的API设计之旅。
31 3
|
10天前
|
SQL 安全 Go
SQL注入不可怕,XSS也不难防!Python Web安全进阶教程,让你安心做开发!
在Web开发中,安全至关重要,尤其要警惕SQL注入和XSS攻击。SQL注入通过在数据库查询中插入恶意代码来窃取或篡改数据,而XSS攻击则通过注入恶意脚本来窃取用户敏感信息。本文将带你深入了解这两种威胁,并提供Python实战技巧,包括使用参数化查询和ORM框架防御SQL注入,以及利用模板引擎自动转义和内容安全策略(CSP)防范XSS攻击。通过掌握这些方法,你将能够更加自信地应对Web安全挑战,确保应用程序的安全性。
39 3
|
13天前
|
Java Python
全网最适合入门的面向对象编程教程:50 Python函数方法与接口-接口和抽象基类
【9月更文挑战第18天】在 Python 中,虽无明确的 `interface` 关键字,但可通过约定实现类似功能。接口主要规定了需实现的方法,不提供具体实现。抽象基类(ABC)则通过 `@abstractmethod` 装饰器定义抽象方法,子类必须实现这些方法。使用抽象基类可使继承结构更清晰、规范,并确保子类遵循指定的方法实现。然而,其使用应根据实际需求决定,避免过度设计导致代码复杂。
|
11天前
|
网络协议 开发者 Python
网络编程小白秒变大咖!Python Socket基础与进阶教程,轻松上手无压力!
在网络技术飞速发展的今天,掌握网络编程已成为开发者的重要技能。本文以Python为工具,带你从Socket编程基础逐步深入至进阶领域。首先介绍Socket的概念及TCP/UDP协议,接着演示如何用Python创建、绑定、监听Socket,实现数据收发;最后通过构建简单的聊天服务器,巩固所学知识。让初学者也能迅速上手,成为网络编程高手。
45 1
|
16天前
|
Python
全网最适合入门的面向对象编程教程:Python函数方法与接口-函数与方法的区别和lamda匿名函数
【9月更文挑战第15天】在 Python 中,函数与方法有所区别:函数是独立的代码块,可通过函数名直接调用,不依赖特定类或对象;方法则是与类或对象关联的函数,通常在类内部定义并通过对象调用。Lambda 函数是一种简洁的匿名函数定义方式,常用于简单的操作或作为其他函数的参数。根据需求,可选择使用函数、方法或 lambda 函数来实现代码逻辑。
|
2月前
|
搜索推荐 Python
Python基础编程:冒泡排序和选择排序的另一种while循环实现
这篇文章介绍了Python中冒泡排序和选择排序的实现,提供了使用while循环的替代方法,并展示了排序算法的运行结果。
20 2
Python基础编程:冒泡排序和选择排序的另一种while循环实现
|
28天前
|
缓存 测试技术 Apache
告别卡顿!Python性能测试实战教程,JMeter&Locust带你秒懂性能优化💡
【9月更文挑战第5天】性能测试是确保应用在高负载下稳定运行的关键。本文介绍Apache JMeter和Locust两款常用性能测试工具,帮助识别并解决性能瓶颈。JMeter适用于测试静态和动态资源,而Locust则通过Python脚本模拟HTTP请求。文章详细讲解了安装、配置及使用方法,并提供了实战案例,帮助你掌握性能测试技巧,提升应用性能。通过分析测试结果、模拟并发、检查资源使用情况及代码优化,确保应用在高并发环境下表现优异。
46 5
下一篇
无影云桌面