PyCharm专业实验2 查找算法实现与比较

devtools/2024/12/27 1:54:02/

一、实验目的

        本文的实验目的是对随机生成的含20个元素的列表使用至少三种不同的排序算法进行排序,并通过事前和事后的性能分析来比较这些算法的效率。

二、实验内容

  1. 数据准备
    • 随机生成一个包含20个元素的列表,元素值在1到100之间。
  2. 排序算法实现
    • 实现冒泡排序算法,对列表进行排序。
    • 实现快速排序算法,对列表进行排序。
    • 实现归并排序算法,对列表进行排序。
  3. 性能分析
    • 事前性能分析:分析每种排序算法的时间复杂度和空间复杂度。
    • 事后性能分析:统计并记录每种排序算法的实际运行时间,通过比较来评估算法的效率。

三、实验演示

        1.随机生成一个含有20个元素的列表&实验截图

随机生成一个含20个元素的列表
import random
random_list = [random.randint(1, 100) for _ in range(20)]
print("列表:", random_list)

        2.使用至少3种算法对上述数据进行排序

#冒泡排序:
import random
from time import perf_counter  # 正确的导入方式random_list = [random.randint(1, 100) for _ in range(20)]
print("列表:", random_list)def bubble(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]bubble_list = random_list[:]start_time = perf_counter()  # 使用 perf_counter
bubble(bubble_list)  # 注意这里应该传递 bubble_list 而不是 random_list[:]
end_time = perf_counter()
print("排序:", bubble_list)
print("耗时:", end_time - start_time, "秒")##########################################################################################快速:
import random
from time import perf_counter# 重新生成或定义 random_list
random_list = [random.randint(1, 100) for _ in range(20)]
print("列表:", random_list)def quick_sort(arr):if len(arr) <= 1:return arrpivot = 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)# 复制 random_list 到 quick_sort_list
quick_sort_list = random_list[:]start_time = perf_counter()
# 对 quick_sort_list 进行排序
sorted_list = quick_sort(quick_sort_list)
end_time = perf_counter()# 打印排序后的列表和耗时
print("排序:", sorted_list)
print("耗时:", end_time - start_time, "秒")##########################################################################################归并
import random
import timerandom_list = [random.randint(1, 100) for _ in range(20)]
print("列表:", random_list)def merge_sort(arr):if len(arr) > 1:mid = len(arr) // 2L = arr[:mid]R = arr[mid:]merge_sort(L)merge_sort(R)i = j = k = 0while i < len(L) and j < len(R):if L[i] < R[j]:arr[k] = L[i]i += 1else:arr[k] = R[j]j += 1k += 1while i < len(L):arr[k] = L[i]i += 1k += 1while j < len(R):arr[k] = R[j]j += 1k += 1merge_sort_list = random_list[:]
start_time = time.perf_counter()
merge_sort(merge_sort_list)  # 直接对 merge_sort_list 进行排序
end_time = time.perf_counter()
print("排序:", merge_sort_list)  # 打印排序后的 merge_sort_list
print("耗时:", end_time - start_time, "秒")

冒泡排序实验结果截图:

快进排序实验结果截图:

归并排序实验结果截图:


http://www.ppmy.cn/devtools/145680.html

相关文章

Python PyMupdf 去除PDF文档中Watermark标识水印

通过PDF阅读或编辑工具&#xff0c;可在PDF中加入Watermark标识的PDF水印&#xff0c;如下图&#xff1a; 该类水印特点 这类型的水印&#xff0c;会在文件的字节流中出现/Watermark、EMC等标识&#xff0c;那么&#xff0c;我们可以通过改变文件字节内容&#xff0c;清理掉…

【Nginx系列】---Nginx配置tcp转发

参考 Nginx 配置文件&#xff1a; error_log /var/log/nginx/error.log notice; pid /var/run/nginx.pid;events {worker_connections 1024; }stream {# 第一个服务转发upstream mysqltest {server 172.16.187.142:9000;}server {listen 9000;proxy_pass mysqltest;}…

VLM--CLIP作分类任务的损失函数

info_nce_loss 这个是clip作对比学习的损失函数 各个博客上都有详细介绍了&#xff0c;我这里就不赘述 def info_nce_loss(image_features, text_features,logit_scale,labels, temperature0.07):batch_size image_features.shape[0]image_features image_features / image…

【大选】2024年美国总统选举数据分析可视化

前言 • &#x1f453; 可视化主要使用 Plotly • &#x1f50e; 数据处理主要使用 pandas • &#x1f449; 本文是我自己在和鲸社区的原创 1.项目背景描述 2024年美国大选是该国政治生活中的重要事件&#xff0c;吸引了全球的关注。本报告通过对选举数据的分析&#xff0c…

Java 网络编程 ②-TCP Socket

这里是Themberfue 在上一节中&#xff0c;我们简单认识了 TCP协议 和 UDP协议 以及 基于UDP Socket 编写了简单的网络通信代码 本节我们将基于 TCP Socket 编写简单的网络通信代码 TCP Socket 类似 UDP Socket&#xff0c;Java也基于 TCP协议 进行了一些接口的封装 基于 TCP 封…

[计算机图形学] 【Unity Shader】【图形渲染】Shader数学基础6-逆矩阵与正交矩阵

在计算机图形学与Shader编程中,矩阵广泛应用于各种变换操作,如旋转、缩放、平移等。理解矩阵的基本性质,尤其是逆矩阵和正交矩阵,对于有效地实现图形变换至关重要。本文将介绍逆矩阵和正交矩阵的数学基础,帮助你更好地理解这些概念及其在图形学中的应用。 逆矩阵的基本概…

玄机-第一章 应急响应-webshell查杀

靶机账号密码 root xjwebshell 1.黑客webshell里面的flag flag{xxxxx-xxxx-xxxx-xxxx-xxxx} 2.黑客使用的什么工具的shell github地址的md5 flag{md5} 3.黑客隐藏shell的完整路径的md5 flag{md5} 注 : /xxx/xxx/xxx/xxx/xxx.xxx 4.黑客免杀马完整路径 md5 flag{md5} 1.黑客web…

React第十八节 useEffect 用法使用技巧注意事项详解

1、概述 useEffect 是React中一个用于 将组件与外部系统同步的 Hook&#xff1b;在函数式组件中处理副作用函数的 Hook&#xff0c;用于替代类式组件中的生命周期函数&#xff1b; 可以在副作用函数中 实现以下操作&#xff1a; a、请求接口&#xff0c;获取后台提供数据 b、操…