我需要动态排序数据。基本上我有一个数组将插入元素。每次插入后,都应对数据进行排序。实现这一目标的最快方法是什么?
答案 0 :(得分:6)
实现此目的的最快方法是删除数组并使用二叉搜索树代替O(lg n )排序插入。使用数组时,由于需要平均移动 n / 2个元素,因此总是会遇到线性时间插入。
编辑:您还可以使用heap代替BST;可以用数组实现。但是,对于二进制堆,迭代将采用O( n lg n ),而在threaded BST中,可以在O( n < / em>)O(1)额外内存的时间。
答案 1 :(得分:0)
如果在每次插入后对数组进行排序,那么最快的方法是使用二进制搜索算法来查找元素的插入位置,并从该位置开始移动所有元素并向右移动,并将元素插入到您创建的间隙中。
也就是说,如果可以的话,使用BST真的会更好,正如larsmans所说的那样。这样,您可以避免每次插入一个元素时都移动所有元素。