文章目录
- 什么是冒泡排序
- 冒泡排序的基本思路
- 用Python实现冒泡排序
- 学习资源推荐
- ](https://blog.csdn.net/Java_ZZZZZ/article/details/135478862?spm=1001.2014.3001.5501)[2.Python基础学习
- ](https://blog.csdn.net/Java_ZZZZZ/article/details/135478862?spm=1001.2014.3001.5501)[3.Python小白必备手册
- ](https://blog.csdn.net/Java_ZZZZZ/article/details/135478862?spm=1001.2014.3001.5501)[4.数据分析全套资源
- ](https://blog.csdn.net/Java_ZZZZZ/article/details/135478862?spm=1001.2014.3001.5501)[5.Python面试集锦
冒泡排序通常是程序员面试中经常被考察的八大排序算法之一。
初级开发岗位的面试基本上都被会问到,原因:
-
冒泡排序是一种基本排序算法,是入门级别的排序算法之一,容易理解和实现。
-
冒泡排序的时间复杂度为 O(n^2),性能不是最优的,但在某些情况下可能仍然是最佳选择。
-
冒泡排序涉及到数组的操作,可以考察被面试者对数组和循环的理解和应用。
今天我们一起学习、复习下关于冒泡排序的知识。
什么是冒泡排序
冒泡排序是一种基本的排序算法,它通过反复交换相邻两个元素的位置,使得每一轮循环都能将未排序部分中的最大元素移动到数组的末尾。
因为排序过程中较小的元素像气泡一样逐渐浮到数组的顶部,故称为冒泡排序。
冒泡排序的基本思路
从数组的第一个元素开始,依次比较相邻两个元素的大小,如果前面的元素比后面的元素大,就交换它们的位置,这样一轮比较下来,最大的元素就被交换到了数组的最后一个位置。
接下来,重复这个过程,直到所有元素都被排序为止。
用Python实现冒泡排序
def bubble_sort(arr):
"""
冒泡排序函数,将输入的数组 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
-
在函数内部,首先获取数组的长度 n,然后通过两个循环嵌套实现冒泡排序。外层循环用来遍历整个数组,内层循环则用来处理未排序的部分。
-
在内层循环中,首先使用
range(0, n-i-1)
来遍历未排序部分的每个元素对,比较相邻两个元素的大小,如果前一个元素比后一个元素大,则交换它们的位置。这样,每一轮遍历就会将未排序部分中的最大元素交换到数组的末尾。 -
每一轮遍历都会将未排序部分的最大元素交换到数组的末尾,因此在下一轮遍历时就可以忽略已经排序的部分。当内层循环结束时,数组已经被排好序了。
测试排序代码:
import random
# 随机生成100个1~100之间的整数值
random_arr = [random.randint(1,100) for n in range(100)]
def bubble_sort(arr):
"""
冒泡排序函数,将输入的数组 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
if __name__ == "__main__":
print(bubble_sort(random_arr))
输出结果:
[1, 1, 2, 2, 2, 3, 5, 6, 6, 7, 10, 10, 12, 14, 17, 19, 21, 22, 22, 23, 24, 24, 24, 25, 25, 26, 28, 28, 30, 30, 33, 33, 34, 35, 35, 36, 37, 37, 37, 37, 39, 40, 42, 43, 45, 45, 46, 48, 50, 50, 50, 51, 51, 53, 54, 56, 56, 57, 57, 58, 59, 59, 61, 61, 63, 64, 64, 65, 65, 66, 67, 69, 70, 71, 71, 75, 77, 78, 83, 83, 83, 84, 85, 85, 87, 89, 90, 90, 91, 91, 91, 93, 93, 93, 94, 96, 96, 99, 100, 100]
如果对于排序的过程还是有点抽象,那么请运行以下代码,来感受下冒泡排序的整个过程:
import time
import pygame
import random
# 初始化 Pygame
pygame.init()
# 设置窗口的大小和标题
WINDOW_WIDTH = 800
WINDOW_HEIGHT = 600
WINDOW_TITLE = 'Bubble Sort Visualization'
WINDOW = pygame.display.set_mode((WINDOW_WIDTH, WINDOW_HEIGHT))
pygame.display.set_caption(WINDOW_TITLE)
# 设置颜色常量
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
RED = (255, 0, 0)
GREEN = (0, 255, 0)
BLUE = (0, 0, 255)
# 设置方块的大小和间隔
BLOCK_SIZE = 10
BLOCK_SPACING = 5
# 创建随机数组
arr = [
random.randint(1, WINDOW_HEIGHT - BLOCK_SIZE) for _ in range(WINDOW_WIDTH // (BLOCK_SIZE + BLOCK_SPACING))
]
# 初始化排序参数
i = 0
j = 0
swapping = False
# 主循环
while True:
# 处理退出事件
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
quit()
# 绘制背景
WINDOW.fill(WHITE)
# 绘制方块
for index, value in enumerate(arr):
rect = pygame.Rect(index * (BLOCK_SIZE + BLOCK_SPACING), WINDOW_HEIGHT - value, BLOCK_SIZE, value)
pygame.draw.rect(WINDOW, BLUE, rect)
# 排序逻辑
if not swapping:
if j == len(arr) - i - 1:
i += 1
j = 0
if i == len(arr) - 1:
pygame.quit()
quit()
else:
if arr[j] > arr[j + 1]:
arr[j], arr[j + 1] = arr[j + 1], arr[j]
swapping = True
j += 1
else:
swapping = False
# 延时更新 Pygame 窗口
time.sleep(0.05)
pygame.display.update()
运行之前先使用
pip install pygame
安装依赖的pygame
模块。
运行代码:
Python是一门非常不错的编程语言,薪资待遇高、就业前景好。即使你不想出去上班,也可以利用Python在家做兼职(比如爬取客户需要的数据、量化交易、代写程序等)。
学习资源推荐
除了上述分享,如果你也喜欢编程,想通过学习Python获取更高薪资,这里给大家分享一份Python学习资料。
这里给大家展示一下我进的兼职群和最近接单的截图
😝朋友们如果有需要的话,可以V扫描下方二维码联系领取,也可以内推兼职群哦~
学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!
### 1.Python学习路线
2.Python基础学习
01.开发工具
02.学习笔记
03.学习视频
3.Python小白必备手册
4.数据分析全套资源
5.Python面试集锦
01.面试资料
02.简历模板
因篇幅有限,仅展示部分资料,添加上方即可获取👆
------ 🙇♂️ 本文转自网络,如有侵权,请联系删除 🙇♂️ ------