//给定平面上的n个点,求距离最近的两个点的距离。
//比较y
var A=[{
x:6,
y:61
},{
x:6,
y:67
},{
x:43,
y:71
},{
x:39,
y:107
},{
x:189,
y:140
}]
//按照x排序 y排序
A.sort(function(a,b){
if(a.x== b.x&&a.y== b.y){
return 0
}
if(a.x== b.x){
return a.y> b.y?1:-1
}
return a.x> b.x?1:-1
})
console.log(A)
//分治算法
function closest_pair(a,l,r){
var n=r-l
console.log(n)
if(n<=1){
return 100
}
var m=(l+r)>>1
var x=a[m].x
//分解
var d=Math.min(closest_pair(a,l,m),closest_pair(a,m+1,r))
//合并
var b=[]
for(var i=l;i<r;i++){
if(Math.abs(a[i].x-x)>=d){
continue
}
for(var j=0;j< b.length;j++){
var dx=a[i].x-b[b.length-j-1].x
var dy=a[i].y-b[b.length-j-1].y
if(dy>=d){break}
d=Math.min(d,Math.sqrt(dx*dx+dy*dy))
}
b.push(a[i])
}
return d
}
//按照x排序
var re=closest_pair(A,0, A.length)
console.log(re)