插入排序
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();
}
}