算法思路
将点按照横坐标排序,把点分为左右,并且判断中间的点
代码:
# 创建点
P = [[1, 2], [6, 4], [2, 4], [8, 8], [6, 9], [10, 11], [2, 3], [10, 2], [6, 7]]
'''
针对点集的快速排序
'''
def quick_sort(arr, start, end):
if start>= end:
return #至关重要,退出条件
low = start
high = end
mid =arr[start]
pivot = arr[start][0]
# 比较的知识横坐标大小
# 交换的是实际的点
while low < high:
while low<high and arr[high][0] >= pivot:
high -= 1
arr[low] = arr[high]
while low< high and arr[low][0]< pivot:
low += 1
arr[high] = arr[low]
arr[low] = mid
quick_sort(arr, start, low-1)
quick_sort(arr, low+1,end)
'''
计算两点之间的距离
'''
def dis(P1, P2):
return ((P1[0]-P2[0])**2+(P1[1]-P2[1])**2)**0.5
'''
分治法
'''
def Closet_Pair(P):
high = len(P)
# 点为3个和两个的情况
if high == 3:
d1 = dis(P[0], P[1])
d2