[C#] 睡眠排序算法-C#版 →→→→→进入此内容的聊天室

来自 , 2020-11-18, 写在 C#, 查看 121 次.
URL http://www.code666.cn/view/6ba1085b
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Collections.Concurrent;
  4. using System.Linq;
  5. using System.Threading;
  6.  
  7. namespace SleepSort
  8. {
  9.     public class SleepSort
  10.     {
  11.         static void Main(string[] args)
  12.         {
  13.             var xs = new[] { 11, 215, 12, 1985, 12, 1203, 12, 152 };
  14.             var sorted = Sort(xs, x => x);
  15.             Console.Write("Sorted:");
  16.             foreach (var x in sorted)
  17.                 Console.Write(" {0}", x);
  18.             Console.WriteLine();
  19.             Console.ReadKey(true);
  20.         }
  21.  
  22.         public static IEnumerable<T> Sort<T>(IEnumerable<T> xs, Func<T, int> conv)
  23.         {
  24.             const int WEIGHT = 40000;
  25.             var ev = new EventWaitHandle(false, EventResetMode.ManualReset);
  26.             var q = new Queue<T>();
  27.             ParameterizedThreadStart f = x => { ev.WaitOne(); Thread.SpinWait(conv((T)x) * WEIGHT); lock (q) { q.Enqueue((T)x); } };
  28.             var ts = xs.Select(x => { var t = new Thread(f); t.Start(x); return t; }).ToArray();
  29.             ev.Set();
  30.             foreach (var t in ts)
  31.                 t.Join();
  32.             return q;
  33.         }
  34.     }
  35. }
  36. //csharp/6495

回复 "睡眠排序算法-C#版"

这儿你可以回复上面这条便签

captcha