using System.Diagnostics;
using System.Collections.Generic;
static uint min(uint maxCount, int[] array)
return mins(0, maxCount, array);
static uint mins(uint start, uint maxCount, int[] array)
var minIndexValue = Tuple.Create(0u, int.MaxValue);
for (uint i = start; i < maxCount && i < array.Length; ++i)
minIndexValue = minIndexValue.Item2 > array[i] ? Tuple.Create(i, array[i]) : minIndexValue;
return minIndexValue.Item1;
static void swap(uint i, uint j, int[] array)
static void selection_sort(uint maxCount, int[] array)
for (uint i = 0; i < maxCount && i < array.Length; ++i)
swap(i, mins(i, maxCount, array), array);
static void Assert<T>(T val, T expected, string message)
bool truth = EqualityComparer<T>.Default.Equals(val, expected);
System.Console.WriteLine("Fail : " + message + " : " + val + " != " + expected);
System.Console.WriteLine(message + " : " + val);
static void Assert<T>(T[] val, T[] expected, string message)
for (int i = 0; i < val.Length && i < expected.Length; ++i)
bool truth = EqualityComparer<T>.Default.Equals(val[i], expected[i]);
System.Console.WriteLine("Fail : " + message + " : " + string.Join(",", val) + " != " + string.Join(",", expected));
System.Console.WriteLine(message + " : " + string.Join(",", val));
public static void Main()
int[] array = {2, 13, 18, 4, 7, 9, 11, 12, 10, 1};
Assert(min(10, array), 9u, "Test minimum value index");
Assert(mins(5, 9, array), 5u, "Test minimum value index in range");
int[] resultArray = {2, 18, 13, 4, 7, 9, 11, 12, 1, 10};
Assert(array, resultArray, "Test swap");
int[] resultArray = {1, 2, 4, 7, 9, 10, 11, 12, 13, 18};
selection_sort(10, array);
Assert(array, resultArray, "Test sort");