//给定平面上的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)