【发布时间】:2018-10-13 14:22:31
【问题描述】:
我觉得这对于插入排序来说效率太低了。我见过的大多数实现都会有一个 while 循环来代替我的第二个 for 循环。除此之外,一旦我的代码中的 j 或等价的代码等于 0 或一旦我在代码的 for 循环中找到的 if 语句被执行,这些 while 循环将终止。问题是每当我尝试实现这样的代码时,我的插入排序都无法正常工作。
getVisitCount 只返回类网页的整数。 AL 是一个 ArrayList。
public void IS()
{
Console.WriteLine("Sorting ArrayList.");
for (int i = 1; i < AL.Count; i++)
{
for (int j = i; j > 0; j--)
{
Webpage EntryJ = (Webpage)AL[j];
Webpage EntryBefore = (Webpage)AL[j - 1];
if (EntryBefore.getVisitCount() < EntryJ.getVisitCount())
{
Webpage temp = EntryBefore;
AL[j - 1] = AL[j];
AL[j] = temp;
}
}
}
【问题讨论】:
-
您问题中的一些标点符号会很好。我不知道你在问什么。
-
这可能更适合code review
-
出于兴趣,当您可以使用 List<T> 时,为什么还要使用 ArrayList?您的目标是什么版本的 .NET 框架?
-
如果您认为插入排序效率低下,我非常同意,您可以尝试另一种排序算法,例如“快速排序”或“合并排序”,以加快输出速度。 en.wikipedia.org/wiki/Sorting_algorithm
-
@VincentElbertBudiman - 对于少量元素,InsertionSort 甚至可以比其他算法更快。事实上,像Timsort 这样的算法已经过优化,因此它们会切换到 InsertionSort 来对列表的一小部分进行排序。
标签: c# loops sorting for-loop arraylist