请给出python代码用分治法查找出长度为n的无序数组中第k大的数
时间: 2024-10-12 14:16:06 浏览: 33
在Python中,可以使用分治法(也称为“快速选择”算法)来查找无序数组中第k大的元素。这里是一个简单的示例,基于随机化版本的快速选择:
```python
import random
def partition(arr, low, high):
pivot_index = random.randint(low, high)
pivot = arr[pivot_index]
arr[low], arr[pivot_index] = arr[pivot_index], arr[low]
i = low + 1
for j in range(low+1, high+1):
if arr[j] > pivot:
arr[i], arr[j] = arr[j], arr[i]
i += 1
arr[low], arr[i-1] = arr[i-1], arr[low]
return i - 1
def quick_select(arr, low, high, k):
if low == high:
return arr[low]
pivot_index = partition(arr, low, high)
if k == pivot_index:
return arr[k]
elif k < pivot_index:
return quick_select(arr, low, pivot_index - 1, k)
else:
return quick_select(arr, pivot_index + 1, high, k)
# 使用方法
arr = [3, 6, 8, 10, 1, 2, 1] # 无序数组
n = len(arr)
k = 3 # 找到第3大数
kth_largest = quick_select(arr, 0, n - 1, n - k)
print(f"数组中第{k}大的数是: {kth_largest}")
阅读全文