【发布时间】:2011-03-09 00:33:14
【问题描述】:
我在一个集合中实现线性搜索,然后我想为什么不使用二进制搜索,为此我不得不使用排序。 虽然我可以实现它们,但我想知道它们在 .net 本身中的位置。我希望它会出现在 .Net 中。
【问题讨论】:
-
当我得到更多的选票时,一定记得给这个投票。
标签: c# .net sorting collections search
我在一个集合中实现线性搜索,然后我想为什么不使用二进制搜索,为此我不得不使用排序。 虽然我可以实现它们,但我想知道它们在 .net 本身中的位置。我希望它会出现在 .Net 中。
【问题讨论】:
标签: c# .net sorting collections search
.NET 默认实现了排序,但是虽然您可以指定您希望元素排序的顺序,但您不能指定它的排序算法。
因此,您可能对this article 感兴趣,它提供了用于抽象排序的 .NET 代码,包括每个主要排序方法的实现。
【讨论】:
来自this所以回答:
.NET 使用 Quicksort 的变体(Sedgewick 的中位数为 3 Quicksort)。
【讨论】:
如果我没记错的话,这就是你要找的东西
public class Person
{
public int age;
public string name;
public Person(int age, string name)
{
this.age = age;
this.name = name;
}
}
List<Person> people = new List<Person>();
people.Add(new Person(50, "Fred"));
people.Add(new Person(30, "John"));
people.Add(new Person(26, "Andrew"));
people.Add(new Person(24, "Xavier"));
people.Add(new Person(5, "Mark"));
people.Add(new Person(6, "Cameron"));
用于搜索
// with delegate
List<Person> young = people.FindAll(delegate(Person p) { return p.age < 25; });
// with lammda
List<Person> young = people.FindAll(a=> a.age < 25);
用于排序
// with delegate
people.Sort(delegate(TestKlasse a, TestKlasse b) { return a.age.CompareTo(b.age); });
// with lambda function
people.Sort((a, b) => a.age.CompareTo(b.age));
【讨论】: