自定义接口:
using System.Text;namespace MBS.Training
{
/// <summary>
/// Represents sort utility.
/// </summary>
interface ISortAlgorithm
{
/// <summary>
/// Sorts the elements using selection algorithm
/// </summary>
/// <typeparam name="T">The type of comparable elements</typeparam>
/// <param name="elements">Elements will be sorted</param>
/// <returns>Sorted elements</returns>
T[] SelectionSort<T>(T[] elements); /// <summary>
/// Sorts the elements using bubble algorithm
/// </summary>
/// <typeparam name="T">The type of comparable elements</typeparam>
/// <param name="elements">Elements will be sorted</param>
/// <returns>Sorted elements</returns>
T[] BubbleSort<T>(T[] elements); /// <summary>
/// Sorts the elements using insertion algorithm
/// </summary>
/// <typeparam name="T">The type of comparable elements</typeparam>
/// /// <param name="elements">Elements will be sorted</param>
/// <returns>Sorted elements</returns>
T[] InsertSort<T>(T[] elements);
}
}
排序类:
namespace MBS.Training
{
class DataSorting<T> : ISortAlgorithm where T : IComparable<T>
{
//选择排序
public T[] SelectionSort<T>(T[] elements)
{
for(int k=0;k<=elements.Length-1;k++)
{ //作k-1趟选取
int min=k; for (int i = min + 1; i <= elements.Length-1; i++)//选择关键字最小的元素的索引
{
if (elements[i].CompareTo(elements[min])) min = i;
}
if(k!=min)
{
T temp=elements[min];
elements[min]=elements[k];
elements[k]=temp;
}
}
return elements;
foreach (T data in elements)
{
System.Windows.Forms.MessageBox.Show("the end sort is: "+data);
}
}
}}从昨天折腾到今天还没折腾出来,请高手帮忙。在线等....
using System.Text;namespace MBS.Training
{
/// <summary>
/// Represents sort utility.
/// </summary>
interface ISortAlgorithm
{
/// <summary>
/// Sorts the elements using selection algorithm
/// </summary>
/// <typeparam name="T">The type of comparable elements</typeparam>
/// <param name="elements">Elements will be sorted</param>
/// <returns>Sorted elements</returns>
T[] SelectionSort<T>(T[] elements); /// <summary>
/// Sorts the elements using bubble algorithm
/// </summary>
/// <typeparam name="T">The type of comparable elements</typeparam>
/// <param name="elements">Elements will be sorted</param>
/// <returns>Sorted elements</returns>
T[] BubbleSort<T>(T[] elements); /// <summary>
/// Sorts the elements using insertion algorithm
/// </summary>
/// <typeparam name="T">The type of comparable elements</typeparam>
/// /// <param name="elements">Elements will be sorted</param>
/// <returns>Sorted elements</returns>
T[] InsertSort<T>(T[] elements);
}
}
排序类:
namespace MBS.Training
{
class DataSorting<T> : ISortAlgorithm where T : IComparable<T>
{
//选择排序
public T[] SelectionSort<T>(T[] elements)
{
for(int k=0;k<=elements.Length-1;k++)
{ //作k-1趟选取
int min=k; for (int i = min + 1; i <= elements.Length-1; i++)//选择关键字最小的元素的索引
{
if (elements[i].CompareTo(elements[min])) min = i;
}
if(k!=min)
{
T temp=elements[min];
elements[min]=elements[k];
elements[k]=temp;
}
}
return elements;
foreach (T data in elements)
{
System.Windows.Forms.MessageBox.Show("the end sort is: "+data);
}
}
}}从昨天折腾到今天还没折腾出来,请高手帮忙。在线等....
把这个方法上面的<T>去掉
DataSorting<T>类型的变量相互比较,但是你真正的目的是想让两个elements[k];
进行比较,即两个T类型变量的比较,而类型T是否实现了IComparable接口,系统是不知道的。
如果你的每个element[i]中的变量是简单类型,如string、int什么的,或者你确定类型T实现了IComparable接口,你可以做如下修改if (elements[i].CompareTo(elements[min]))
---->
if(elements[i] is IComparable &&
((IComparable)elements[i]).CompareTo(elements[min])
)
((IComparable<T>)elements[i]).CompareTo((IComparable<T>)elements[min])
才开始接触C# 很多地方不是很熟 在class DataSorting<T> : ISortAlgorithm where T : IComparable<T>这个类的定义中 where T:IComparable 是不是就已经让T实现了IComparable接口呢?如果不是,那这句话是什么意思?
class Sort : ISortAlgorithm
{
public T[] BubbleSort<T>(T[] elements)
{
for (int i = 0; i < elements.Length; i++)
{
for (int j = i + 1; j < elements.Length; j++)
{
if ((Convert.ToInt32(elements[j]))<(Convert.ToInt32(elements[i])))
{
T temp = elements[j];
elements[j]=elements[i];
elements[i] = temp;
}
}
}
foreach (T data in elements)
{
Console.WriteLine("排序后:"+data);
}
throw new NotImplementedException();
}调用方法:
static void Main(string[] args)
{
int[] list={4,6,2,0,1};
Sort s = new Sort();
s.BubbleSort<List>;
}
s.BubbleSort<List>;出错!应该怎么调用啊!