问题:给出n个坐标表示n个点,并将这n个point排列在一条水平线上,要求挨个排序,最后达到 (x,y), (x+1, y), (x+2,y)……,求出移动的最少步数。
算法思想:分治算法+little中位数 (ps: 还未练习到中位数)
解题思路:要求排列成有序的一横排(默认为递增序列),可分步进行,根据复杂程度分为x和y两步,且先移动y坐标。先将每个point移至一水平线(存在2个或以上的点重合在一起的情况)。要求总的移动步数最少,则x轴和y轴的移动步数均为最少。故找出所有点y坐标的中位数,假设为y_middle, 则y=y_middle直线表示排序后的水平直线。x轴时,先进行一次排序后,假设水平线上的n个点存储在数组a[n]中,则第一个点a[0]最终排序后的位置是addr,a[1]的最终位置是(