实现方式。
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;
}
}