BubbleSort - 实用委托
概述:
排序类,可以对任意类型的对象进行排序,包括基本数据类型;
对象类,不仅定义本身数据,同时包含了排序的细节.
排序类(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 - 实用委托的更多相关文章
- .net学习之多线程、线程死锁、线程通信 生产者消费者模式、委托的简单使用、GDI(图形设计接口)常用的方法
1.多线程简单使用(1)进程是不执行代码的,执行代码的是线程,一个进程默认有一个线程(2)线程默认情况下都是前台线程,要所有的前台线程退出以后程序才会退出,进程里默认的线程我们叫做主线程或者叫做UI线 ...
- Delegate(委托)
在前面lambda章节中稍微提了一下委托,今天这章就让我们来深究一下委托. 委托的本质是一种类,他是继承MulticastDelegate类的. 而声明委托的关键字的delegate,如:public ...
- C#委托与事件实用场景
首先,我们需要知道,到底在什么情况下必须使用委托和事件呢? 请看下面的场景:首领A要搞一场鸿门宴,吩咐部下B和C各自带队埋伏在屏风两侧,约定以杯为令:若左手举杯,则B带队杀出:若右手举杯,则C带队杀出 ...
- [转载]C#深入分析委托与事件
原文出处: 作者:风尘浪子 原文链接:http://www.cnblogs.com/leslies2/archive/2012/03/22/2389318.html 同类链接:http://www.c ...
- 也许你需要点实用的-Web前端笔试题
之前发的一篇博客里没有附上答案,现在有空整理了下发出来,希望能帮助到正在找工作的你,还是那句话:技术只有自己真正理解了才是自己的东西,共勉. Web前端笔试题 Html+css 1.对WEB标准以及w ...
- 委托、Lambda表达式和事件
1.1 引用方法 委托是寻址方法的 .NET 版本.委托是类型安全的类.它定义了返回类型和参数的类型.委托类不仅包含对方法的引用,也可以包含对多个方法的引用. Lambda 表达式 ...
- 解密jQuery事件核心 - 委托设计(二)
第一篇 http://www.cnblogs.com/aaronjs/p/3444874.html 从上章就能得出几个信息: 事件信息都存储在数据缓存中 对于没有特殊事件特有监听方法和普通事件都用ad ...
- js事件代理(委托)
JavaScript事件代理(委托)一般用于以下情况: 1. 事件注册在祖先级元素上,代理其子级元素.可以减少事件注册数量,节约内存开销,提高性能. 2. 对js动态添加的子元素可自动绑定事件. 之前 ...
- 快速理解C#高级概念(一) Delegate委托
做.NET开发很久,最近重新温习<C#高级编程>一书.发现很多曾经似懂非懂的问题,其实也是能够慢慢钻研慢慢理解的. 所以,打算开写<C#高级编程系列>博文.其中会借鉴<C ...
随机推荐
- Web前端浏览器兼容初探
浏览器兼容是前端开发人员必须掌握的一个技能,但是初入前端的同学或者其他后台web开发同学往往容易选择忽略,而形成两个极端: 1 我最开始都是使用IE6,IE6上没问题,其它浏览器坑爹(多出现与前端后端 ...
- 发布一款仿天猫产品放大镜JQuery插件
效果如下图: 1.原图 2.放大镜效果: 插件源码如下: /* * * JQUERY 简洁无极放大镜插件-zoomer * Author:盛世游侠 * QQ:418873053 * Date:2013 ...
- Python自动化运维之7、生成器、迭代器、列表解析、迭代器表达式
迭代器和生成器 1.迭代器 迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退,不过这也没什么,因为人们很少在迭代途中往后退.另外 ...
- Visual Studio调试之断点基础篇
Visual Studio调试之断点基础篇 我曾经问过很多人,你一般是怎么调试你的程序的? F9, F5, F11, F…… 有很多书和文章都是介绍怎么使用Visual Studio编写WinForm ...
- Linux_install jdk
Linux安装JDK步骤 1.先从网上下载jdk(jdk-7u1-linux-i586.rpm),下载地址:http://www.oracle.com/technetwork/java/javase/ ...
- CentOS安装MySQL问题汇总
遇到的错误 ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO) denied for ...
- Linux学习——粘粘今天看的东西
由二分割表就叧有64 bytes而已,最多叧能容纳四笔分割的记录, 这四个分割的记录被称为主要(Primary)戒延伸(Extended)分割槽.分割槽的最小单位为磁柱(cylinder)请注意, 延 ...
- hibernate 映射<三>一对一外键键关联
bean 关系: 正向工程: 反向工程: 逆向生成步骤: 生成的xml: ... from hbm_one2one_pk.person person0_ left outer join hbm_one ...
- iOS越狱开发手记 - iOS9.3 dyld_decache不能提取arm64的dyld的解决方法
参考以下文章 http://iosre.com/t/when-dyld-decache-fails-on-dyld-shared-cache-arm64-dsc-extractor-saves-our ...
- LA 4794 - Sharing Chocolate dp
题意 有一块\(x*y\)的巧克力,问能否恰好分成n块,每块个数如下 输入格式 n x y a1 a2 a3 ... an 首先\(x \times y 必然要等于 \sum\limits_{i=1} ...