1.Employee类
Employee类中包含姓名和薪水,自定义的比较方法是按照薪水的多少。
class Employee
{
public string Name { get; private set; }
public int Salary { get; private set; }
public Employee(string name, int salary)
{
this.Name = name;
this.Salary = salary;
}
//对象比较
public static bool CompareTo(Employee lh, Employee rh)
{
return lh.Salary > rh.Salary;
}
//重写
public override string ToString()
{
return Name + ": " + Salary;
}
}
2.泛型冒泡排序
冒泡排序在此不多做介绍,值得一提的是此处对冒泡排序做了一点优化,即记录当前一轮排序是否有数据交换,如果没有,说明已经是有序的序列,退出循环即可。
该排序函数是泛型函数,可以对任意T类型排序。委托作为参数,指向对T类型的比较函数。Func<T, T, bool> compareMethod表示接受两个T类型的参数,返回bool类型的值。
static void CommonSort<T>(T[] sortArray, Func<T, T, bool> compareMethod)
{
bool flag = true;
do
{
flag = false;
for (int i = 0; i < sortArray.Length - 1; i++)
{
if (compareMethod(sortArray[i], sortArray[i + 1]))
{
T temp = sortArray[i];
sortArray[i] = sortArray[i + 1];
sortArray[i + 1] = temp;
flag = true;
}
}
} while (flag);
}
3.测试
static void Main(string[] args)
{
Employee[] employees = new Employee[]
{
new Employee("April", 21),
new Employee("Harris", 17),
new Employee("Dave",12),
new Employee("Tom", 34)
};
CommonSort<Employee>(employees, Employee.CompareTo);
foreach (var item in employees)
{
Console.WriteLine(item.ToString());
}
Console.ReadLine();
}