C#快速排序 (Linq实现的快速排序的泛型版本)
Linq泛型版:
/// <summary>
/// Linq实现的快速排序的泛型版本
/// </summary>
/// <typeparam name="T">限定参数类型为实现ICompareble接口的类型</typeparam>
/// <param name="list"></param>
/// <returns></returns>
private IEnumerable<T> QuickSortingFunc<T>(IEnumerable<T> list) where T : IComparable<T>
{
if (list.Count() <= 1) return list;
var baseNumber = list.First();//取第一个元素为比较基数。
return QuickSortingFunc(list.Where(x => x.CompareTo(baseNumber) < 0)) //把比basenumber小的元素都找出来,放在前面
.Concat(list.Where(x => x.CompareTo(baseNumber) == 0))
.Concat(QuickSortingFunc(list.Where(x => x.CompareTo(baseNumber) > 0))); //把比basenumber大的元素都找出来,放在后面,然后连接起来,递归调用该方法。
}
/// </summary>
/// <typeparam name="T">限定参数类型为实现ICompareble接口的类型</typeparam>
/// <param name="list"></param>
/// <returns></returns>
private IEnumerable<T> QuickSortingFunc<T>(IEnumerable<T> list) where T : IComparable<T>
{
if (list.Count() <= 1) return list;
var baseNumber = list.First();//取第一个元素为比较基数。
return QuickSortingFunc(list.Where(x => x.CompareTo(baseNumber) < 0)) //把比basenumber小的元素都找出来,放在前面
.Concat(list.Where(x => x.CompareTo(baseNumber) == 0))
.Concat(QuickSortingFunc(list.Where(x => x.CompareTo(baseNumber) > 0))); //把比basenumber大的元素都找出来,放在后面,然后连接起来,递归调用该方法。
}
测试方法:
public void TestMethod()
{
var list = new List<int> { 22, 33, 11, 43, 55, 123, 452, 1, 3, 5, 15, 153, 100, 532, 553, 24, 33, 11, 53, 11, 33 };
List<int> resultList = QuickSortingFunc<int>(list).ToList<int>();
resultList.ForEach(A => Console.Write(A+", ")); //打印已排序的数组
Console.ReadKey();
}
{
var list = new List<int> { 22, 33, 11, 43, 55, 123, 452, 1, 3, 5, 15, 153, 100, 532, 553, 24, 33, 11, 53, 11, 33 };
List<int> resultList = QuickSortingFunc<int>(list).ToList<int>();
resultList.ForEach(A => Console.Write(A+", ")); //打印已排序的数组
Console.ReadKey();
}
转自:http://www.cnblogs.com/tianmaicheng/archive/2011/08/26/2154756.html

浙公网安备 33010602011771号