日期:2014-05-17  浏览次数:20782 次

如我有一个List<double>[1,2,3,41,55,66,77,81,92,100],我现在有一个值 35 如何最快的插入到排序的位置
如我有一个List<double>
[1,2,3,41,55,66,77,81,92,100],从小到大排列好的
然后,我现在有一个值 35 如何最快的插入到排序的位置?

谢谢
------解决方案--------------------
比较简单的就用二分法
------解决方案--------------------
轮询一次找到比该值大的索引在哪插入 这个时间复杂度应该最低吧
------解决方案--------------------
你可以先插入,再排序.
------解决方案--------------------
先add进去,再sort
------解决方案--------------------
可以用 二分法 比如要插入数为n  先取 数组的中间索引的数比较  如果索引不是中间则取整  10个则取第5个数66(从0开始)if (n〉66) 再取索引 0-5 的中间值3 对应数字为41  
依次类推 即可插入 (综合速度最快)
------解决方案--------------------
对于几个数据而言,如果你用这个那个的算法,未必会快,所以算法是对于大量数据会有明显的效率提高
------解决方案--------------------

            List<double> list = new List<double>{ 1, 2, 3, 41, 55, 66, 77, 81, 92, 100 };
            list.Add(35);
            list.Sort();

------解决方案--------------------
用LinkedList List只能插入到最后,插入到中间效率更低。

当然,不考虑性能,就用9L的。
------解决方案--------------------
二分法,不过就这点数据的话直接Add后执行内置的排序即可。
------解决方案--------------------
另外,如果你要不断的“插入”数据到有序表,可以考虑使用二叉树构造极小堆,代替List<T>