使用LINQ进行快速排序
本文关键字:快速排序 LINQ 使用 | 更新日期: 2023-09-27 18:30:07
我正在使用LINQ和泛型开发一个基本的快速排序算法,但我遇到了一些问题,主要是类型推理。
这是代码
private static List<T> Quicksort<T>(IEnumerable<T> list)
where T : IComparable, IComparable<T>
{
if (!list.Any())
return new List<T>();
var first = list.First();
var smallerAndLarger = list.Skip(1).GroupBy(n => n >= first);
return new List<T>
(Quicksort(smallerAndLarger.Where(x => !x.Key)).Add(first))
.AddRange(Quicksort(smallerAndLarger.Where(x => x.Key)));
}
编译器抱怨这行
var smallerAndLarger = list.Skip(1).GroupBy(n => n >= first);
说类型T
不支持比较操作,但我已经在方法签名中设置了T
应该实现IComparable
和泛型版本,所以这应该有效吗?
问题是使用>=(即:n=>n>=第一个),除非类型定义了如何使用运算符,否则它不可用(IComparable没有)。
不要使用gt/lt/eq运算符,而是使用CompareTo(http://msdn.microsoft.com/en-us/library/system.icomparable.compareto(v=vs.110).aspx)以确定优先级:
n => n.CompareTo(first) >= 0