java排序算法思路
大家好,我有一个问题一直都很纠结,面试时的回答好像总不尽人意。问题是:如何从1亿个无序数中选出1000个最大的,要求效率要高。我的想法是运用堆排的思想,从中选出1000个最大的,可是面试官不满意哦,所以想请教大家给个思路,谢谢了。
------解决方案--------------------如果只选出1000个最大的,而不是对所有1亿个数排序的话。我的想法是建一个 容量为1000的有序数组或者列表。 然后对1亿个数一次循环,前1000个只是往数组里放(这1000个数需要做有序处理),从1001个开始,往数组里面插入数字,如果比数组中最小数字还要小的话,直接跳过,进行处理第1002个数字,以此类推。
这种想法最简单的,如果再想高效一点的话,我能想到的就是对这个数组进行二叉平衡树处理,降低后面读取的数字往数组插入的时间;
更高效的方法,再请别人想吧。
------解决方案--------------------面试官为什么不满意?是不是没考虑内存够不够的问题?