- 1 名前:デフォルトの名無しさん [2007/03/22(木) 23:39:12 ]
- どうだろう、そろそろ語り始めてみないか? どんだけぇー!
- 25 名前:デフォルトの名無しさん mailto:sage [2007/04/01(日) 14:37:24 ]
- チラシの裏 クイックソート (C# 3.0 without LINQ)
using System; using System.Collections.Generic; public static class QSort { public static IEnumerable<T> Sort<T>(IEnumerable<T> seq) where T : IComparable<T> { return IsEmpty(seq) ? seq : Sort(Head(seq), Tail(seq)); } static IEnumerable<T> Sort<T>(T head, IEnumerable<T> tail) where T : IComparable<T> { return Concat( Sort(tail.Filter(e => e.CompareTo(head) < 0)), Lift(head), Sort(tail.Filter(e => e.CompareTo(head) >= 0)) ); } static bool IsEmpty<T>(IEnumerable<T> seq) { foreach (var e in seq) { return false; } return true; } static T Head<T>(IEnumerable<T> seq) { foreach (var e in seq) { return e; } throw new InvalidOperationException("empty sequence"); }
- 26 名前:デフォルトの名無しさん mailto:sage [2007/04/01(日) 14:38:03 ]
-
static IEnumerable<T> Tail<T>(IEnumerable<T> seq) { bool first = true; foreach (var e in seq) { if (first) { first = false; continue; } yield return e; } } static IEnumerable<T> Concat<T>(params IEnumerable<T>[] seqs) { foreach (var seq in seqs) { foreach (var e in seq) { yield return e; } } } static IEnumerable<T> Filter<T>(this IEnumerable<T> seq, Predicate<T> pred) { foreach (var e in seq) { if (pred(e)) { yield return e; } } } static IEnumerable<T> Lift<T>(T value) { yield return value; } }
|

|