using System;
using System.Collections.Generic;
using System.Linq;
public class Test
{
private static int comparisons = 0;
public static void Main()
{
var r = new Random();
var input = new int[1000];
for (int i = 0; i < input.Length; i++) {
input[i] = r.Next();
}
var sorted = quicksortArray(input).ToArray();
Console.WriteLine(comparisons);
}
public static T[] quicksortArray<T>(T[] input) where T : IComparable<T>{
if (input.Count() <= 1) return input;
var pivot = input.FirstOrDefault();
var lesser = quicksortArray(input.Skip(1).Where(i => {
comparisons++;
return i.CompareTo(pivot) <= 0;
}).ToArray());
var greater = quicksortArray(input.Where(i => {
comparisons++;
return i.CompareTo(pivot) > 0;
}).ToArray());
return lesser.Concat(new T[] { pivot }).Concat(greater).ToArray();
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKdXNpbmcgU3lzdGVtLkxpbnE7CgpwdWJsaWMgY2xhc3MgVGVzdAp7Cglwcml2YXRlIHN0YXRpYyBpbnQgY29tcGFyaXNvbnMgPSAwOwoJCglwdWJsaWMgc3RhdGljIHZvaWQgTWFpbigpCgl7CgkJdmFyIHIgPSBuZXcgUmFuZG9tKCk7CgkJdmFyIGlucHV0ID0gbmV3IGludFsxMDAwXTsKCQkKCQlmb3IgKGludCBpID0gMDsgaSA8IGlucHV0Lkxlbmd0aDsgaSsrKSB7CgkJCWlucHV0W2ldID0gci5OZXh0KCk7CgkJfQoJCQoJCXZhciBzb3J0ZWQgPSBxdWlja3NvcnRBcnJheShpbnB1dCkuVG9BcnJheSgpOwoJCQoJCUNvbnNvbGUuV3JpdGVMaW5lKGNvbXBhcmlzb25zKTsKCX0KCQoJcHVibGljIHN0YXRpYyBUW10gcXVpY2tzb3J0QXJyYXk8VD4oVFtdIGlucHV0KSB3aGVyZSBUIDogSUNvbXBhcmFibGU8VD57CgkgICAgaWYgKGlucHV0LkNvdW50KCkgPD0gMSkgcmV0dXJuIGlucHV0OwoJICAgIHZhciBwaXZvdCA9IGlucHV0LkZpcnN0T3JEZWZhdWx0KCk7CgkgICAgdmFyIGxlc3NlciA9IHF1aWNrc29ydEFycmF5KGlucHV0LlNraXAoMSkuV2hlcmUoaSA9PiB7CgkgICAgCWNvbXBhcmlzb25zKys7CgkgICAgCXJldHVybiBpLkNvbXBhcmVUbyhwaXZvdCkgPD0gMDsKICAgIAl9KS5Ub0FycmF5KCkpOwoJICAgIHZhciBncmVhdGVyID0gcXVpY2tzb3J0QXJyYXkoaW5wdXQuV2hlcmUoaSA9PiB7CgkgICAgCWNvbXBhcmlzb25zKys7CgkgICAgCXJldHVybiBpLkNvbXBhcmVUbyhwaXZvdCkgPiAwOwogICAgCX0pLlRvQXJyYXkoKSk7CgkgICAgcmV0dXJuIGxlc3Nlci5Db25jYXQobmV3IFRbXSB7IHBpdm90IH0pLkNvbmNhdChncmVhdGVyKS5Ub0FycmF5KCk7Cgl9Cn0=