【发布时间】:2011-08-03 13:52:33
【问题描述】:
我想对android.location.Location 的列表进行排序。排序应基于我的位置与列表中的位置的距离。所以我认为应该在搜索过程中计算距离。所以我决定使用插入排序。
这是正确的选择吗?
非常感谢
【问题讨论】:
我想对android.location.Location 的列表进行排序。排序应基于我的位置与列表中的位置的距离。所以我认为应该在搜索过程中计算距离。所以我决定使用插入排序。
这是正确的选择吗?
非常感谢
【问题讨论】:
如果是List 位置,我会选择Collections.sort + 自定义Comparator:
final Location myLocation = someLocation;
Collections.sort(locations, new Comparator<Location>() {
@Override
public int compare(Location o1, Location o2) {
Float dist1 = o1.distanceTo(myLocation);
Float dist2 = o2.distanceTo(myLocation);
return dist1.compareTo(dist2);
}
});
【讨论】:
如果列表中有很多位置,您可能需要考虑排序算法的时间复杂度。
插入排序的最坏情况 Senario 时间复杂度为 O(n^2) [n 是列表中的项目数],这意味着如果要排序的列表是一个反向排序的列表,它必须遍历整个列表对列表中的每个对象进行排序。除非您有非常大的列表,否则这似乎不是问题。
如果您不打算对非常大的列表进行排序,则插入排序可以很好地满足您的情况。您可以查看的其他一些排序包括选择排序、冒泡排序、快速排序或合并排序。
【讨论】: