升級冒泡排序:比較工資(string+int)
給員工寫一個(gè)單獨(dú)的類:
internal class Employee
{
? ? ? ? public string Name { get; private set; }
? ? ? ? public double Salary { get; private set; }
? ? ? ? public Employee(string name, double salary)
? ? ? ? { Name = name ; Salary = salary; }
? ? ? ? ?public static bool Compare(Employee e1, Employee e2)
? ? ? ? ?{
? ? ? ? ? ? ? ? ?return e1.Salary > e2.Salary;//.Salary就是按工資比較
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//.Name就是按名字比較
? ? ? ? ?}
}
=======================================================
class Program//主程序的類
{
? ? ? ? //T代表任意類型的數(shù)據(jù)類型
? ? ? ? //這兩個(gè)T,代表兩個(gè)Employee類型的數(shù)據(jù)
? ? ? ? ?public static void Sort<T>(T[] data, Func<T, T, bool> compare)
? ? ? ? ?{
? ?? ? ? ? ? ? ? bool swapped = true;
? ? ? ? ? ? ? ???do
? ? ? ? ? ? ? ?? {
? ? ? ? ? ? ? ? ? ? ? ? ?swapped = false;
? ? ? ? ? ? ? ? ? ? ? ? ?for (int i = 0; i < data.Length - 1; i++)
? ? ? ? ? ? ? ? ? ? ? ???{
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? if(compare(data[i],data[i+1]))
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??{
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?T temp = data[i];//因?yàn)閿?shù)據(jù)是T類型,所以這里不能是int,必須是T
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?data[i] = data[i + 1];
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?data[i + 1] = temp;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?swapped = true;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? }
? ? ? ? ? ? ? ? ? ? ? ? ?}
? ? ? ? ? ? ? ?? } while (swapped);
? ? ? ? ??}
? ? ? ? ? static void Main(string[] args)//主函數(shù)
? ? ? ? ??{
? ? ? ? ? ? ? ? ?Employee[] employees = {?
? ? ? ? ? ? ? ? ? ? ? ? new Employee("Sunny",20000),
? ? ? ? ? ? ? ? ? ? ? ? new Employee("John",10000),
? ? ? ? ? ? ? ? ? ? ? ? new Employee("Bob",13000),
? ? ? ? ? ? ? ? ? ? ? ? new Employee("Tom",18300),
? ? ? ? ? ? ? ? ? ? ? ? new Employee("Michael",23000),
? ? ? ? ? ? ? ? ? ? ? ? new Employee("lisa",31000),
? ? ? ? ? ? ? ? ? ?};
? ? ? ? ? ?
? ? ? ? ? ? ? ? ? Sort<Employee>(employees,Employee.Compare);
? ? ? ? ? ? ? ? ??foreach (Employee emp in employees)
? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ???Console.WriteLine(emp.Name+":"+emp.Salary);
? ? ? ? ? ? ? ? ?? }
? ? ? ? ??}
}