前言
本篇文章将结合一次大学实验,使用Python实现排序算法的性能测试与Web交互功能,完整展示从算法实现到结果分析的过程。本实验的目标是通过编程实践,掌握基本排序算法、快速排序,以及通过Web交互方式完成输入与输出计算。
实验分为三个主要部分:
- 排序算法的性能比较。
- 查找算法效率对比。
- 使用Web表单实现简单交互。
实验内容与目标
实验目标
- 理解排序基本算法和快速排序的原理与性能差异。
- 掌握有序表与无序表查找的时间复杂度及性能对比。
- 实现一个简单的Web交互应用,模拟高性能计算的工作流程。
实验内容
-
排序算法测试:
- 随机生成100个整数,使用插入排序完成排序。
- 随机生成10万个整数,分别使用插入排序和快速排序,测试性能差异。
-
查找算法测试:
- 对随机生成的100个整数,分别在无序表和有序表中查找,测试查找效率。
-
Web交互应用:
- 通过Web表单输入数据,调用Python代码处理排序与查找操作,并将结果返回到Web页面。
Python代码实现
1. 排序算法实现
我们需要实现插入排序和快速排序,并测试其性能。
import random
import time
# 插入排序
def insertion_sort(arr):
for i in range(1, len(arr)):
key = arr[i]
j = i - 1
while j >= 0 and arr[j] > key:
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)
# 性能测试
def test_sorting_algorithms():
# 随机生成100个整数
small_data = [random.randint(0, 1000) for _ in range(100)]
# 随机生成10万个整数
large_data = [random.randint(0, 100000) for _ in range(100000)]
# 插入排序测试
start_time = time.time()
insertion_sort(small_data.copy())
print(f"Insertion Sort (100 elements): {time.time() - start_time:.5f} seconds")
start_time = time.time()
insertion_sort(large_data.copy())
print(f"Insertion Sort (100000 elements): {time.time() - start_time:.5f} seconds")
# 快速排序测试
start_time = time.time()
quick_sort(small_data.copy())
print(f"Quick Sort (100 elements): {time.time() - start_time:.5f} seconds")
start_time = time.time()
quick_sort(large_data.copy())
print(f"Quick Sort (100000 elements): {time.time() - start_time:.5f} seconds")
test_sorting_algorithms()
2. 查找算法实现
查找算法包括在有序表和无序表中的查找效率对比。
# 顺序查找
def sequential_search(arr, target):
for i in range(len(arr)):
if arr[i] == target:
return i
return -1
# 二分查找
def binary_search(arr, target):
low, high = 0, len(arr) - 1
while low <= high:
mid = (low + high) // 2
if arr[mid] == target:
return mid
elif arr[mid] < target:
low = mid + 1
else:
high = mid - 1
return -1
# 查找测试
def test_search_algorithms():
data = [random.randint(0, 1000) for _ in range(100)]
data.sort() # 二分查找需要有序表
target = random.choice(data)
# 无序表查找
start_time = time.time()
sequential_search(data, target)
print(f"Sequential Search: {time.time() - start_time:.5f} seconds")
# 有序表查找
start_time = time.time()
binary_search(data, target)
print(f"Binary Search: {time.time() - start_time:.5f} seconds")
test_search_algorithms()
3. Web交互实现
借助Flask
框架实现简单的Web交互,用于输入排序或查找参数,并返回计算结果。
from flask import Flask, request, render_template
import random
app = Flask(__name__)
# 排序操作
@app.route('/sort', methods=['GET', 'POST'])
def sort():
if request.method == 'POST':
data = request.form['numbers']
numbers = list(map(int, data.split(',')))
sorted_numbers = quick_sort(numbers)
return f"Sorted Numbers: {sorted_numbers}"
return '''
<form method="post">
Enter numbers separated by commas: <input type="text" name="numbers"><br>
<input type="submit" value="Sort">
</form>
'''
# 查找操作
@app.route('/search', methods=['GET', 'POST'])
def search():
if request.method == 'POST':
data = request.form['numbers']
target = int(request.form['target'])
numbers = list(map(int, data.split(',')))
result = sequential_search(numbers, target)
return f"Target found at index: {result}" if result != -1 else "Target not found"
return '''
<form method="post">
Enter numbers separated by commas: <input type="text" name="numbers"><br>
Enter target number: <input type="text" name="target"><br>
<input type="submit" value="Search">
</form>
'''
if __name__ == '__main__':
app.run(debug=True)
实验结果与分析
-
排序算法结果:
- 对于小规模数据(100个整数),插入排序和快速排序的性能差异不明显。
- 对于大规模数据(10万个整数),快速排序明显快于插入排序。
- 时间复杂度比较:
- 插入排序:O(n²)
- 快速排序:O(nlog₂n)
-
查找算法结果:
- 在无序表中,顺序查找的效率较低,尤其是数据量较大时。
- 在有序表中,二分查找效率显著提升,时间复杂度为O(log₂n)。
-
Web交互结果:
- 排序功能:用户输入一组数字,返回排序后的结果。
- 查找功能:用户输入数字列表和目标值,返回目标值的索引或提示未找到。
总结与反思
实验收获
- 熟悉了Python的排序算法实现与时间复杂度分析。
- 理解了有序表和无序表查找的性能差异。
- 掌握了如何使用
Flask
实现简单的Web交互应用。
问题与改进
- 算法优化: 可以进一步实现多路归并排序,用于处理更大规模的数据。
- Web优化: 目前的Web页面较为简单,可改进为动态显示结果的用户界面。
- 大规模测试: 使用更大规模的数据(如百万级数据)测试算法性能。
参考代码与资料
- Flask官方文档
- Python排序算法资料:https://docs.python.org/3/library/sort.html
通过本次实验,不仅加深了对数据结构与算法的理解,也实际体验了将算法与Web开发结合的流程。希望本文能为大家的学习提供参考!