2017-05-08 66 views
2

我正在学习OOP,所以我必须与数组进行交互,而不是链接列表。我已经整理了数据。问题是删除数组的成员(我们称之为DL)。我想出的第一种方法是覆盖i+1i的数据,从DL的索引开始,并将读数减1。后来我发现我可以将DL与最后一个成员交换,然后将计数变量减1但是,我必须再次对数据进行排序。那么哪一个更好?哪种方法可以更好地删除数组成员?

+0

数组有多大?他们有什么样的数据?它可以memcpy'd?你有没有考虑过尝试和分析? –

+4

我非常厌倦了这种似乎并不需要的帖子的随机downvoting。他问了一个完全有效的问题,不需要被欺负。 –

+0

我的错,特朗,我意识到(迟到),这可能是让你折扣链接列表的'学习',而不是'OOP'中固有的 - 已经消除了我的评论。 – paxdiablo

回答

3

如果需要保持排序状态,我认为最好将目标后面的每个元素都改回来,以覆盖它。将它换成最后一个元素,然后再使用它将需要更多的工作,因为交换需要三个动作:

1)将元素1复制到临时变量。 2)将元素2复制到元素1。 3)将temp元素复制到元素2。

这需要在排序算法中重复多次。如果您正在处理一个结构或类的对象数组,每个对象都有多个私有数据成员,则工作负载会进一步增加。

覆写需要更少的移动每次迭代:

1)复制到i + 1i

所以,我肯定会去覆盖,通过移动所有元素回来一个和减少一个。

无论如何,它可能只是最好的时间,与您的具体数据集,并看看哪一个更快。通过计算实施开始和结束之间的毫秒数,这非常简单。

0

“更好”是一个非常主观的术语,哪一个更适合您(无论您选择何种定义)在很大程度上取决于您正在讨论的数据集(大小等)。

但我会提到这一点,阵列洗牌和大多数“常规”排序的相对时间复杂度分别为O(n)O(n log n)

这意味着在绝大多数情况下洗牌可能会更快。

+0

谢谢,我编辑了标题。 –

相关问题