概述:

    排序类,可以对任意类型的对象进行排序,包括基本数据类型;

    对象类,不仅定义本身数据,同时包含了排序的细节.

  排序类(BubbleSorter):

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace BubbleSorter {
class BubbleSorter {
public static void Sort<T>(IList<T> list, Func<T, T, bool> comparison) {
bool swapped; //标识是否进行交互操作.
for (int i = ; i < list.Count - ; i++) {
swapped = false;
for (int j = ; j < list.Count - - i; j++) {
if (comparison(list[j], list[j + ])) {
Swap<T>(list, j, j + );
swapped = true;
}
}
if (!swapped) //不进行交互,标识已排好序.
break;
}
} private static void Swap<T>(IList<T> list, int i, int j) {
T tmp = list[i];
list[i] = list[j];
list[j] = tmp;
}
}
}

  对象类:

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace BubbleSorter {
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; //按照Salary的降序排序.
}
}
}

  调用类:

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace BubbleSorter {
class Program {
static void Main(string[] args) {
Employee[] emplyees = new Employee[]{
new Employee("Bugs Bunny", ),
new Employee("Elmer Fudd", ),
new Employee("Daffy Duck", 2.5m),
new Employee("Wile Coyote", 100.38m),
new Employee("Foghorn Leghorn", 2.3m),
new Employee("RoadRunner", )
};
Console.WriteLine("before sort:");
foreach (Employee e in emplyees) {
Console.WriteLine(e);
} BubbleSorter.Sort<Employee>(emplyees, Employee.CompareSalary); Console.WriteLine("after sort:");
foreach (Employee e in emplyees) {
Console.WriteLine(e);
}
}
}
}

  output:

 before sort:
Bugs Bunny ¥2.00
Elmer Fudd ¥10.00
Daffy Duck ¥2.50
Wile Coyote ¥100.38
Foghorn Leghorn ¥2.30
RoadRunner ¥5.00
after sort:
Wile Coyote ¥100.38
Elmer Fudd ¥10.00
RoadRunner ¥5.00
Daffy Duck ¥2.50
Foghorn Leghorn ¥2.30
Bugs Bunny ¥2.00

BubbleSort - 实用委托的更多相关文章

  1. .net学习之多线程、线程死锁、线程通信 生产者消费者模式、委托的简单使用、GDI(图形设计接口)常用的方法

    1.多线程简单使用(1)进程是不执行代码的,执行代码的是线程,一个进程默认有一个线程(2)线程默认情况下都是前台线程,要所有的前台线程退出以后程序才会退出,进程里默认的线程我们叫做主线程或者叫做UI线 ...

  2. Delegate(委托)

    在前面lambda章节中稍微提了一下委托,今天这章就让我们来深究一下委托. 委托的本质是一种类,他是继承MulticastDelegate类的. 而声明委托的关键字的delegate,如:public ...

  3. C#委托与事件实用场景

    首先,我们需要知道,到底在什么情况下必须使用委托和事件呢? 请看下面的场景:首领A要搞一场鸿门宴,吩咐部下B和C各自带队埋伏在屏风两侧,约定以杯为令:若左手举杯,则B带队杀出:若右手举杯,则C带队杀出 ...

  4. [转载]C#深入分析委托与事件

    原文出处: 作者:风尘浪子 原文链接:http://www.cnblogs.com/leslies2/archive/2012/03/22/2389318.html 同类链接:http://www.c ...

  5. 也许你需要点实用的-Web前端笔试题

    之前发的一篇博客里没有附上答案,现在有空整理了下发出来,希望能帮助到正在找工作的你,还是那句话:技术只有自己真正理解了才是自己的东西,共勉. Web前端笔试题 Html+css 1.对WEB标准以及w ...

  6. 委托、Lambda表达式和事件

    1.1 引用方法      委托是寻址方法的 .NET 版本.委托是类型安全的类.它定义了返回类型和参数的类型.委托类不仅包含对方法的引用,也可以包含对多个方法的引用.      Lambda 表达式 ...

  7. 解密jQuery事件核心 - 委托设计(二)

    第一篇 http://www.cnblogs.com/aaronjs/p/3444874.html 从上章就能得出几个信息: 事件信息都存储在数据缓存中 对于没有特殊事件特有监听方法和普通事件都用ad ...

  8. js事件代理(委托)

    JavaScript事件代理(委托)一般用于以下情况: 1. 事件注册在祖先级元素上,代理其子级元素.可以减少事件注册数量,节约内存开销,提高性能. 2. 对js动态添加的子元素可自动绑定事件. 之前 ...

  9. 快速理解C#高级概念(一) Delegate委托

    做.NET开发很久,最近重新温习<C#高级编程>一书.发现很多曾经似懂非懂的问题,其实也是能够慢慢钻研慢慢理解的. 所以,打算开写<C#高级编程系列>博文.其中会借鉴<C ...

随机推荐

  1. 中文man帮助安装

    下面我们来安装下中文man帮助 首先在http://pkgs.fedoraproject.org/repo/pkgs/man-pages-zh-CN/manpages-zh-1.5.2.tar.bz2 ...

  2. JavaScript 禁用键盘按钮

    代码写多了,有些使用过的方法和技巧会一时半会想不起来,平日记录下来,方便自己和有需要的人日后查阅. $(document).keydown(function () { if (window.event ...

  3. 怎么加sudo权限

    安装好Debian后还不能使用sudo如果没有安装sudo,则在root用户下apt-get install sudo在root设置sudoers配制文件chmod +w /etc/sudoersvi ...

  4. START WITH CONNECT BY PRIOR 链表查询

    使用场景:排序 设计思路,id为主键,index为顺序,index存前一个节点的id,当然,按照这个思路可以实现双向链表的(preindex存前一个节点,nextindex存下一个节点) 这样的话排序 ...

  5. Android系统源代码下载

    最近,我在研究android,所以想下载android源代码看看.按照http://source.android.com/source/downloading.html 这个页面所提示的步骤在下载源代 ...

  6. MongoDB insert/update/one2many案例

    以博文与评论为例,博文有标题内容,对应多个评论,评论有评论人.评论内容等. ()插入一条博文: db.blog.insert( {','title':'this is blog title1','co ...

  7. gis论坛

    http://bbs.csdn.net/forums/GIS/ http://forums.mysql.com/list.php?23 http://www.remotegis.net/ http:/ ...

  8. 【转】24. android dialog ——ProgressDialog 进度条对话框详解

    原文网址:http://blog.csdn.net/jamesliulyc/article/details/6375598 首先在onCreateDialog方法里创建一个ProgressDialog ...

  9. Android数据存储三剑客——SharedPreferences、File、SQLite

    Android中常用的数据存储一般有三种方式:SharedPreferences.文件和SQLite数据库,用来保存需要长时间保存的数据.本文将通过几个具体的小实例来讲解这三种方式的具体实现. 数据存 ...

  10. 如何在Windows下使用matplotlib

    在开始之前,向matplotlib的创造者,John D. Hunter表示崇高的敬意,和无尽的怀念. (John D. Hunter 1968-2012) matplotlib是一个给予Python ...