这种方法使用原理还是冒泡排序,但是他扩展的,不仅是对int类型的数据,也可以对其他的一些无法用“<”或“>”来进行排序的对象。
代码如下:
解决方案的名称:DelegateBubbleSorter
BubbleSorter.cs
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace DelegateBubbleSorter { class BubbleSorter { static public void Sort<T>(IList<T> sortArray, Func<T, T, bool> comparison) { bool swapped = true; do { swapped=false; for (int i = 0; i < sortArray.Count - 2; i++) { if (comparison(sortArray[i + 1], sortArray[i])) { T temp = sortArray[i]; sortArray[i] = sortArray[i + 1]; sortArray[i + 1] = temp; swapped = true; } } } while(swapped); } } }
Employee.cs
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace DelegateBubbleSorter { class Employee { public string Name { get; private set; } public decimal Salary { get; private set; } public Employee(string name, decimal salary) { this.Name = name; this.Salary = salary; } public override string ToString() { return string.Format("{0},{1:C}", Name, Salary); } public static bool CompareSalary(Employee e1, Employee e2) { return e1.Salary < e2.Salary; } } }
调用函数:Program.cs
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace DelegateBubbleSorter { class Employee { public string Name { get; private set; } public decimal Salary { get; private set; } public Employee(string name, decimal salary) { this.Name = name; this.Salary = salary; } public override string ToString() { return string.Format("{0},{1:C}", Name, Salary); } public static bool CompareSalary(Employee e1, Employee e2) { return e1.Salary < e2.Salary; } } }
源码都贴出来了,大家可以运行一把看看