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 ...
随机推荐
- The Primo ScholarRank Technology: Bringing the Most Relevant Results to the Top of the List
By Tamar Sadeh, Director of Marketing In today’s world, users’ expectations for a quick and easy sea ...
- linux学习第一天(X window 及 语系查询设置)
前言: 在写这篇博文之前,我已经详细阅读了<鸟哥的Linux私房菜>,但是实践并不深入,只是单纯的为了了解常用的命令,扩展自己的知识广度.看过一遍感觉收获还是有的,但是并不是很精通.因此, ...
- jquery的节点查询
jQuery.parent(expr) //找父元素 jQuery.parents(expr) //找到所有祖先元素,不限于父元素 jQuery.children ...
- echarts.制作中国地图,点击对应的省市链接到该省份的详细介绍
今天花了一天的时间,用echart弄了一个效果,是从中国地图点进去身份并把改省份的数据渲染出来的效果,刚开始完全没有头绪,只能硬着头皮去看百度echart的api,和博客,看了半天,好家伙,终于给我找 ...
- AE-分享<学习后,制作的视频实例>小视频-与大家交流!
- iconv any encoding to UTF-8
http://stackoverflow.com/questions/9824902/iconv-any-encoding-to-utf-8
- Qt on Android
Qt on Android Episode 7(翻译) http://blog.csdn.net/foruok/article/details/46323129 Android基础整理之四大组件Act ...
- python手记(38)
runfile(r'K:\testpro\testopencv.py', wdir=r'K:\testpro') http://blog.csdn.net/myhaspl myhaspl@qq.com ...
- Codeforces Round #301 (Div. 2) E . Infinite Inversions 树状数组求逆序数
E. Infinite Inversions ...
- 我的eclipse插件推荐
1. ER图工具 ERMaster - http://ermaster.sourceforge.net/update-site/ 优点:可根据数据库生成ER图.支持生成转换成PNG,JavaDOC ...