うろ覚えのクイックソートを思い出しながら書いてみた
トライ
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { var sample = new List<int>() { 3, 12, 4, 0, -3, 2, 8, 1, 1000, -21 }; var result = Program.QuickSort(sample); foreach (var item in result) { Console.Write(item + " "); } Console.ReadKey(); } private static IEnumerable<int> QuickSort(IEnumerable<int> array) { if (array.Count() == 0) { return array; } else { int border = array.First(); var left = new List<int>(); var right = new List<int>(); foreach (var item in array.Skip(1)) { if (item < border) left.Add(item); else right.Add(item); } return QuickSort(left) .Concat(new List<int>() { border }) .Concat(QuickSort(right)); } } } }
LINQの部分は、もっとシンプルに性能のよいものが書けそうな気がする。まあ、とりあえずはこれで。
後で調べたところ、こんな記事を発見 => 「neue cc - C# Linqでクイックソート」。LINQを極めると、こんなスマートに書けるという例。