1.寻找最小差值问题(最接近点对问题)
在一维空间中,可以通过从小到大排序,然后分别算出s1-s0,s2-s1,s3-s2,…,sn-sn-1,分别比较它们的大小,可以得出最小值,但是它只适用于一维空间中,不适用于二维(平面)和三维(空间),所以可以采用分治策略的思想
算法:按照中位数划分成s1和s2区域,就可以使两边的区域的数据个数基本相当,从而使时间复杂度最小(O(nlogn)),在s1、s2中分别找到最小值(d1、d2),还需要找到s1区域的最大值Max,s2区域的最小值Min,然后求d1、d2、Min-Max三者中的最小值
int Paritition(int* br, int left, int right)
{
int tmp = br[left];
while (left < right)
{
while (left < right && br[right] > tmp)
{
--right;
}
if (left < right)
{
br[left] = br[right];
}
while (left < right && br[left] <= tmp)
{
++left;
}
if (left < right)
{
br[right] = br[left];
}
br[left] =