c#泛型+委托扩展冒泡排序

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();
    }

运行结果


猜你喜欢

转载自blog.csdn.net/liyazhen2011/article/details/81048410