***************主方法
/// <summary>
/// 二元选择排序-选择排序
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="array"></param>
/// <param name="n"></param>
public void BinarySelectionSorting(T[] array, int n)
{
int max, min;
T temp;///临时变量
for (int i = 0; i <= n /2; i++)
{
max = n - i-1;
min = i;
for (int j = i+1; j <= n-i-1; j++)
{///在未排序的区域进行最大值最小值判断
if (CompareTo(array[max],array[min])==-1)
{///判断最大值若小于最小值,则互换
temp=array[max];
array[max] = array[min];
array[min] = temp;
}
if (CompareTo(array[j], array[min]) == -1)
{///获取最小值下标
min = j;
}
if (CompareTo(array[j], array[max]) == 1)
{///获取最大值下标
max = j;
}
}
///将最小最大值换到对应位置上
temp = array[i];
array[i] = array[min];
array[min] = temp;
temp = array[n - i - 1];
array[n - i - 1] = array[max];
array[max] = temp;
///打印
PrintArray(array, n, i);
}
}
************************************************
/// <summary>
/// 打印数组元素
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="array"></param>
/// <param name="n"></param>
/// <param name="i"></param>
public void PrintArray(T[] array, int n, int i)
{
Console.WriteLine("当前i:" + i);
for (int j = 0; j <n; j++)
{
Console.Write(array[j].ToString()+",");
}
Console.WriteLine("");
}
**************************************************
/// <summary>
/// 比较泛型值
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="t1"></param>
/// <param name="t2"></param>
/// <returns></returns>
public int CompareTo(T t1,T t2)
{
if (Convert.ToDouble(t1) > Convert.ToDouble(t2))
{
return 1;
}
else if(Convert.ToDouble(t1) < Convert.ToDouble(t2))
{
return -1;
}
else
{
return 0;
}
}
参考自:http://blog.csdn.net/hguisu/article/details/7776068
感觉他的二元选择排序有问题,优化了下,亲自测试,可以用