class BubbleSorter { public static void Sort<T>(IList<T> sortArray, Func<T, T, bool> comparison) { bool swapped = true; do { swapped = false; for (int i = 0; i < sortArray.Count - 1; 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); } }
class Employee { public string Name { get; private set; } public decimal Salary { get; private set; } public Employee(string name, decimal salary) { Name = name; 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; } }
class Program { static void Main(string[] args) { Employee[] employees = { new Employee("Bugs Bunny", 56300), new Employee("Elmer Fudd", 6300), new Employee("Daffy Duck", 25000), new Employee("Wile Coyote",1000000.38m) }; BubbleSorter.Sort(employees, Employee.CompareSalary); foreach (Employee employee in employees) { Console.WriteLine(employee); } Console.ReadKey(); } }