C#对冒泡排序的扩展和实例

冒泡排序的扩展

冒泡排序原理是,对一个数组进行n-1次遍历,在每一次的遍历中,将最大的数字放到最后。
另一种表达形式则是:
定义一个bool变量,如果在一次数组遍历中,没有产生数字的交换,则bool置为true;否则就继续对整个数组再次进行遍历。

但是这样的排序只能针对于数字形式而不能对普通的数据进行排序。

实例

功能:
利用salary来对employee进行排序。
这里,定义了一个Employee的类,其中有两个属性:

  • Name(string类型)
  • Salary(int类型)
    对于这样的类型数据进行排序,如何去实现?

首先,对于Employee类:

namespace SortExtension
{
    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 Compare(Employee e1, Employee e2)
        {
            if (e1.Salary > e2.Salary)
                return true;
            return false;
        }

        //对类内的ToString方法进行重写,以便可以输出类内的成员
        //否则,输出的只是实例对象的名称
        public override string ToString()
        {
            return Name + " " + Salary;
        }
    }
}

对于函数主体:

namespace SortExtension
{
    class Program
    {
        //泛型
        //参数:类型为T的数组  Func委托(两个类型为T的参数和bool类型的返回值)
        static void CommonSort<T>(T[] numArray, Func<T,T, bool>compare)
        {
            bool isSwapped = false;
            do
            {
                isSwapped = false;
                for (int i = 0; i < numArray.Length-1; i++)
                {
                    if (compare(numArray[i], numArray[i+1]))
                    {
                        isSwapped = true;
                        T tmp = numArray[i];
                        numArray[i] = numArray[i + 1];
                        numArray[i + 1] = tmp;
                    }
                }
            } while (isSwapped);
        }



        static void Main(string[] args)
        {
            Employee[] employees = new Employee[]
            {
                new Employee("a", 1),
                new Employee("b", 4),
                new Employee("c", 3),
                new Employee("d", 2),
                new Employee("e", 7),
                new Employee("f", 0)
        };
            CommonSort<Employee>(employees, Employee.Compare);
            foreach (var e in employees)
                Console.WriteLine(e);
            Console.ReadKey();         
        }
    }
}

猜你喜欢

转载自blog.csdn.net/lym940928/article/details/80214587
今日推荐