Skip to content

Instantly share code, notes, and snippets.

@sdcb
Created September 26, 2018 03:00
Show Gist options
  • Save sdcb/1789035ce0e94247c7a692582e65fea6 to your computer and use it in GitHub Desktop.
Save sdcb/1789035ce0e94247c7a692582e65fea6 to your computer and use it in GitHub Desktop.
Random Comapre(LINQPad)
<Query Kind="Statements">
<Namespace>System.Runtime</Namespace>
</Query>
var org = Enumerable.Range(0, 1000).ToArray();
var s1 = Shuffle(org.ToArray());
var s2 = Shuffle2(org.ToArray());
Util.Chart(org, x => x, x => s1[x]).AddYSeries(x => x, LINQPad.Util.SeriesType.Line).DumpInline($"Delta(S1)={Delta(s1)} (Less)");
Util.Chart(org, x => x, x => s2[x]).AddYSeries(x => x, LINQPad.Util.SeriesType.Line).DumpInline($"Delta(S2)={Delta(s2)} (Large)");
int Delta(int[] arr)
{
var forward = true;
var delta = 0;
for (var i = 1; i < arr.Length; ++i)
{
if (forward)
{
if (arr[i] > arr[i - 1])
{
delta++;
continue;
}
}
else
{
if (arr[i] < arr[i - 1])
{
delta++;
continue;
}
}
forward = !forward;
}
return delta;
}
T[] Shuffle<T>(T[] array)
{
var rng = new Random();
int n = array.Length;
while (n > 1)
{
int k = rng.Next(n--);
T temp = array[n];
array[n] = array[k];
array[k] = temp;
}
return array;
}
T[] Shuffle2<T>(T[] array)
{
var r = new Random();
return array.OrderBy(x => r.NextDouble() < 0.5).ToArray();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment