请用【Python 】帮我写一段快排代码,并帮我讲解下实现逻辑使用蒙塔卡洛方法计算圆周率
时间: 2024-09-16 14:05:15 浏览: 50
当然可以,这里是快速排序(QuickSort)的Python实现:
```python
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)
# 示例
arr = [3,6,8,10,1,2,1]
sorted_arr = quick_sort(arr)
print("Sorted array:", sorted_arr)
```
快速排序的核心思想是分治法,首先选择一个基准元素(pivot),将数组分为两部分,一部分的所有元素都小于基准,另一部分的所有元素都大于基准,然后递归地对这两部分再进行排序。
关于用蒙特卡洛方法计算圆周率,这里先给出一个简化的版本,假设我们在一个单位正方形内随机投掷许多点并统计落在单位圆内的点数:
```python
import random
def monte_carlo_pi(n):
num_points_circle = 0
total_points = 0
for _ in range(n):
x = random.uniform(0, 1)
y = random.uniform(0, 1)
distance = x**2 + y**2
if distance <= 1:
num_points_circle += 1
total_points += 1
pi_approximation = 4 * num_points_circle / total_points
return pi_approximation
n = 1000000 # 想要的随机点数越多,结果越精确
pi_estimate = monte_carlo_pi(n)
print(f"Estimated value of π is approximately {pi_estimate}")
```
当随机点足够多时,落在圆内的比例接近π/4,通过乘以4就可以得到π的近似值。
阅读全文