插入排序

using System;
public class InsertionSort
{
    private InsertionSort()
    { }
    public static void Sort<T>(T[] data) where T : IComparable<T>
    {
        for (var i = 0; i < data.Length; i++)
        {
            for (var j = i; j > 0; j--)
            {
                if (data[j].CompareTo(data[j - 1]) < 0)
                {
                    Swap(data, j, j - 1);
                }
                else
                {
                    break;
                }
            }
        }
    }
    //优化版本
    public static void Sort2<T>(T[] data) where T : IComparable<T>
    {
        for (var i = 0; i < data.Length; i++)
        {
            T temp = data[i];
            int j;
            for (j = i; j > 0; j--)
            {
                if (temp.CompareTo(data[j - 1]) < 0)
                {
                    data[j] = data[j - 1];
                }
                else
                {
                    break;
                }
            }
            data[j] = temp;
        }
    }
    static void Swap<T>(T[] data, int i, int j)
    {
        T temp = data[i];
        data[i] = data[j];
        data[j] = temp;
    }
}
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);

                // TestSort("SelectionSort", tenpArray);
                // TestSort("SelectionSort", tenpArray);
                // TestSort("SelectionSort", tenpArray);
                try
                {

                    TestSort("InsertionSort", tenpArray);
                    TestSort("InsertionSort2", arrays);

                }
                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();
    }
}