using System;
interface ISortable
{
void Sort ();
}
abstract class BaseSort
{
protected int[] data;
public BaseSort(int[] newData)
{
data = newData;
}
public override string ToString()
{
string ret = "{ ";
foreach (int num in data)
ret += num + " ";
ret += "}";
return ret;
}
protected int Min (int index)
{
int min = index;
for (int i=index; i<data.Length; i++)
{
if (data[i] <= data[min])
min = i;
}
return min;
}
protected void Swap (int p1, int p2)
{
int tmp = data[p1];
data[p1] = data[p2];
data[p2] = tmp;
}
}
class InsertionSort : BaseSort, ISortable
{
public InsertionSort(int[] newData): base (newData){}
public void Sort()
{
}
}
class SelectionSort : BaseSort, ISortable
{
public SelectionSort(int[] newData): base (newData){}
public void Sort()
{
for (int i=0; i<data.Length; i++)
{
Swap(i, Min(i));
}
}
}
class Program
{
public static void Main ()
{
int[] data = {2, 5, 1, 2, 8, 34, -1};
SelectionSort ss = new SelectionSort(data);
Console.WriteLine("Before: {0}", ss);
ss.Sort();
Console.WriteLine("After: {0}", ss);
}
}