实现方式。

using System;

public class SelectionSort
{
    private SelectionSort()
    {

    }
    public static void Sort<T>(T[] arr) where T : IComparable<T>
    {
        for (var i = 0; i < arr.Length; i++)
        {
            int minIndex = i;
            for (var j = i; j < arr.Length; j++)
            {
                if (arr[j].CompareTo(arr[minIndex]) < 0)
                {
                    minIndex = j;
                }
            }
            Swap(arr, minIndex, i);
        }
    }
    static void Swap<T>(T[] arr, int i, int j)
    {
        T tempi = arr[i];
        arr[i] = arr[j];
        arr[j] = tempi;
    }
}

 测试:

using System;
using System.IO;
using System.Net;
using System.Text;
using LitJson;

namespace myCode
{
    class Program
    {
        static void Main(string[] args)
        {
            //回文.LongestPalindrome("mmmmmmm");
            // XXCZ();
            //TestNumber();
            // TestGenerate();
            // TestSelectionSort();

            // var tenpArray = ArrayGenerator.GenerateOrderArray(1000, 0, 12999);
            // TestAction(() =>
            // {
            //     TestSelectionSortperformance(tenpArray);
            // });
            // System.Console.WriteLine(SortingHelper.isSortwd(tenpArray));
            // Sort();

            // html[http://192.168.0.88/dev/webapi/api/class/lstUserByClass]   clssid[103]


            // WebClient MyWebClient = new WebClient();
            // //DateTime time1 = DateTime.Now;
            // MyWebClient.Credentials = CredentialCache.DefaultCredentials;//获取或设置用于向Internet资源的请求进行身份验证的网络凭据
            // MyWebClient.Headers[HttpRequestHeader.ContentType] = "application/json";
            // MyWebClient.Headers["X-Token"] = "2d5e0d4167cca74016374b6e076f4360";
            // MyWebClient.Encoding = Encoding.UTF8;
            // // try
            // // {
            // JsonData data = new JsonData();
            // data["id"] = 105;
            // // byte[] bytes = System.Text.Encoding.Default.GetBytes(data.ToJson());
            // var pageHtml = MyWebClient.UploadString("http://192.168.0.88/dev/webapi/api/class/lstUserByClass", data.ToJson()); //从指定网站下载数据
            //                                                                                                                    // Debug.LogError("pageHtml::" + pageHtml);
            // System.Console.WriteLine(pageHtml);


            // var httpWebRequest = (HttpWebRequest)WebRequest.Create("http://192.168.0.88/dev/webapi/api/class/lstUserByClass");
            // httpWebRequest.ContentType = "application/json";
            // httpWebRequest.Headers.Add("X-Token", "2d5e0d4167cca74016374b6e076f4360");
            // httpWebRequest.Method = "POST";
            // using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
            // {
            //     // string json = "{\"user\":\"test\"," +
            //     //               "\"password\":\"bla\"}";
            //     JsonData data = new JsonData();
            //     data["id"] = 103;
            //     // // byte[] bytes = System.Text.Encoding.Default.GetBytes(data.ToJson());
            //     streamWriter.Write(data.ToJson());
            //     streamWriter.Flush();
            //     streamWriter.Close();
            // }

            // var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
            // using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
            // {
            //     // pageHtml = streamReader.ReadToEnd();
            //     // Debug.LogError("pageHtml:" + pageHtml);
            //     System.Console.WriteLine(streamReader.ReadToEnd());
            // }
            Sort();
        }
        static void Sort()
        {

            int[] datasize = { 1000, 10000 };
            foreach (var item in datasize)
            {
                var tenpArray = ArrayGenerator.GenerateOrderArray(item, 0, item);
                int[] arrays = new int[tenpArray.Length];
                System.Array.Copy(tenpArray, arrays, tenpArray.Length);


                try
                {
                    TestSort("SelectionSort", tenpArray);
                    // TestSort("InsertionSort2", arrays);
                    // TestSort("SelectionSort", tenpArray);
                    // TestSort("SelectionSort", tenpArray);
                    // TestSort("InsertionSort", tenpArray);

                }
                catch (System.Exception e)
                {
                    System.Console.WriteLine(e.Message);
                    // throw;
                }
                // TestSort("MergeSort", arrays);
            }
        }


        static void TestSort<T>(string soreName, T[] dataArray) where T : IComparable<T>
        {

            System.Diagnostics.Stopwatch watch = new System.Diagnostics.Stopwatch();
            watch.Start();  //开始监视代码运行时间
                            //需要测试的代码

            // StringBuilder stringBuilder = new StringBuilder();
            // for (var i = 0; i < dataArray.Length; i++)
            // {
            //     stringBuilder.Append("_" + dataArray[i]);
            // }
            // System.Console.WriteLine("未排序 :" + stringBuilder.ToString());

            if (soreName.Equals("SelectionSort"))
            {
                SelectionSort.Sort(dataArray);
            }
            else if (soreName.Equals("InsertionSort"))
            {
                InsertionSort.Sort(dataArray);
            }
            else if (soreName.Equals("InsertionSort2"))
            {
                InsertionSort.Sort2(dataArray);
            }
            else if (soreName.Equals("MergeSort"))
            {
                MergeSort.Sort(dataArray);
            }

            watch.Stop();  //停止监视

            // StringBuilder stringBuilder2 = new StringBuilder();
            // for (var i = 0; i < dataArray.Length; i++)
            // {
            //     stringBuilder2.Append("_" + dataArray[i]);
            // }
            // System.Console.WriteLine("已经排序:" + stringBuilder2.ToString());

            TimeSpan timespan = watch.Elapsed;  //获取当前实例测量得出的总时间
            if (!SortingHelper.isSortwd(dataArray))
            {

                throw new Exception(" 没有经过排序 + sort name :" + soreName);
            }
            string log = string.Format("排序的名字【{0}】,排序的执行时间【{1}(毫秒)】 排序数组长度【{2}】", soreName, timespan.TotalMilliseconds, dataArray.Length);
            // System.Console.WriteLine("打开窗口代码执行时间:{0}(毫秒)", timespan.TotalMilliseconds);  //总毫秒数
            System.Console.WriteLine(log);
        }
        public static T[] TestSelectionSortperformance<T>(T[] tenpArray) where T : IComparable<T>
        {

            SelectionSort.Sort(tenpArray);
            return tenpArray;
            // Equatable(tenpArray);
        }
        public static void TestSelectionSort()
        {
            int[] arr = { 1, 3, 4, 57, 867, 34, 2, 6, };
            string[] selectA = { "A", "B", "C", "FD", "DW" };
            Student[] students = { new Student("AA", 20), new Student("BB", 23), new Student("CC", 100) };
            SelectionSort.Sort(arr);
            SelectionSort.Sort(selectA);
            SelectionSort.Sort(students);
            Equatable(arr);
            Equatable(selectA);
            Equatable(students);
        }
        public static void Equatable<T>(T[] data)
        {
            StringBuilder stringBuilder = new StringBuilder();
            for (var i = 0; i < data.Length; i++)
            {
                stringBuilder.Append("_" + data[i].ToString());
            }
            System.Console.WriteLine(stringBuilder.ToString());
        }
        public static void TestGenerate()
        {
            int[] testArray = ArrayGenerator.GenerateOrderArray(100000);

            System.Diagnostics.Stopwatch watch = new System.Diagnostics.Stopwatch();
            watch.Start();  //开始监视代码运行时间
                            //需要测试的代码

            var res = 线性查找.search(testArray, 100000);
            watch.Stop();  //停止监视
            TimeSpan timespan = watch.Elapsed;  //获取当前实例测量得出的总时间
            System.Console.WriteLine("打开窗口代码执行时间:{0}(毫秒)", timespan.TotalMilliseconds);  //总毫秒数
            System.Console.WriteLine("res :" + res);
        }

        static void XXCZ()
        {
            // 线性查找 xxcz = new 线性查找();
            int[] data = { 23, 45, 1, 35, 12, 567, 124, 4 };
            string[] strs = { "123", "SS", "ss" };

            // Student[] students = { new Student("hh"),
            // new Student("sh"), new Student("qq") };
            // // var res = 线性查找.search(data, 12);
            // // var res = 线性查找.search(strs, "ss");
            // var res = 线性查找.search(students,
            // new Student("qq"));
            // System.Console.WriteLine("res :" + res);

        }
        static void TestNumber()
        {
            Random rnd = new Random();
            for (int ctr = 0; ctr <= 9; ctr++)
            {
                int randomN = rnd.Next(Int32.MinValue, Int32.MaxValue);
                Number n = new Number(randomN);
                Console.WriteLine("n = {0,12}, hash code = {1,12}", n, n.GetHashCode());
            }
        }






    }
}

public struct Number
{
    private int n;

    public Number(int value)
    {
        n = value;
    }

    public int Value
    {
        get { return n; }
    }

    public override bool Equals(Object obj)
    {
        if (obj == null || !(obj is Number))
            return false;
        else
            return n == ((Number)obj).n;
    }

    public override int GetHashCode()
    {
        return n;
    }

    public override string ToString()
    {
        return n.ToString();
    }
}

// The example displays output like the following:
//       n =   -634398368, hash code =   -634398368
//       n =   2136747730, hash code =   2136747730
//       n =  -1973417279, hash code =  -1973417279
//       n =   1101478715, hash code =   1101478715
//       n =   2078057429, hash code =   2078057429
//       n =   -334489950, hash code =   -334489950
//       n =    -68958230, hash code =    -68958230
//       n =   -379951485, hash code =   -379951485
//       n =    -31553685, hash code =    -31553685
//       n =   2105429592, hash code =   2105429592
using System;

public class ArrayGenerator
{
    public ArrayGenerator()
    {

    }
    public static int[] GenerateOrderArray(int n)
    {
        int[] arr = new int[n];
        for (var i = 0; i < n; i++)
        {
            arr[i] = i;
        }
        return arr;
    }
    public static int[] GenerateOrderArray(int n, int min, int max)
    {
        int[] arr = new int[n];
        Random random = new Random();

        for (var i = 0; i < n; i++)
        {
            arr[i] = random.Next(min, max);
        }
        return arr;
    }
}