例如,我有一个List
List<int> list = new List<int>();
list.Add(1);
list.Add(5);
list.Add(7);
list.Add(3);
list.Add(17);
list.Add(10);
list.Add(13);
list.Add(9);
我使用像这样的List.Sort方法
private static int Compare(int x, int y)
{
if (x == y)
return 0;
else if (x > y)
return -1;
else
return 1;
}
List.Sort(Compare);
我使用像这样的冒泡排序
private static void Sort(List<int> list)
{
int size = list.Capacity;
for (int i = 1; i < size; i++)
{
for (int j = 0; j < (size - i); j++)
{
if (list[j] > list[j+1])
{
int temp = list[j];
list[j] = list[j+1];
list[j+1] = temp;
}
}
}
}
我的问题就像标题,我想知道哪个更快?
谢谢
答案 0 :(得分:6)
总的来说,冒泡排序比其他任何东西都要慢,包括用快速排序算法实现的List.Sort
。
答案 1 :(得分:4)
冒泡排序很容易实现,但效率不高。 List.Sort
方法使用QuickSort,这是一种更复杂,也更有效的算法。
但是,当您的列表中的项目非常少时(如您的示例中),算法的效率并不重要。重要的是它是如何实现的以及有多少开销,所以你只需要使用Stopwatch
类来计算你的例子。这当然只会告诉您哪个更快,因为您正在测试的确切列表更快,因此选择要在应用程序中使用的算法并不是非常有用。
此外,当列表中的项目非常少时,哪种算法更快,并不重要,因为它总是花费很少的时间。您应该考虑实际实施中将有多少项目,以及项目数量是否会随着时间的推移而增长。
答案 2 :(得分:3)
查看the documentation of List<T>.Sort()
:
平均而言,此方法是O(n log n)运算,其中n是Count;在最坏的情况下,它是一个O(n ^ 2)操作。
由于冒泡排序为O(n ^ 2)(平均而且在最坏的情况下),您可以期望List<T>.Sort()
在大型数据集上更快(更快)。排序8个元素(如你所有)的速度通常非常小(甚至使用冒泡排序),这与你使用的内容无关。
在这种情况下,可能影响速度的是您使用List<T>.Sort()
的委托,而不是使用冒泡排序。调用委托是相对较慢的,所以当你进行微优化时(如果你不应该在大多数情况下都这样做),你应尽量避免使用它们。