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 ...
随机推荐
- CentOS5.5下安装Ant
从yum源直接下ant: [root@master local]$ yum install ant 运行ant,发现报错: java.lang.NoClassDefFoundError: org/ap ...
- C++ Primer 5th 第9章 顺序容器
练习9.1:对于下面的程序任务,vector.deque和list哪种容器最为适合?解释你的选择的理由.如果没有哪一种容器优于其他容器,也请解释理由.(a) 读取固定数量的单词,将它们按字典序插入到容 ...
- div边框阴影的实现【转载】
box-shadow:阴影水平偏移值(可取正负值): 阴影垂直偏移值(可取正负值):阴影模糊值:阴影颜色: Firefox支持Box Shadow(阴影):-moz-box-shadow:2px 2p ...
- 在ubuntu14.14 安装php扩展扩展出现的问题
我是在ubuntu14.14 安装的 lnmp. 部分扩展.均已安装好,但是我用apt-get 方式安装 redis和curl扩展时,我的配置都设置但是从phpinfo里面看没有响应的配置项. 于是我 ...
- 《python基础教程》笔记之 抽象
创建函数 记录函数,在函数的开头写下字符串,它就会作为函数的一部分进行存储,这称为文档字符串,如 def square(x): 'Caculates the square of the number ...
- 深拷贝与浅拷贝(mutableCopy与Copy)详解 iOS
深拷贝与浅拷贝(mutableCopy与Copy)详解 iOS ios中并不是所有的对象都支持copy,mutableCopy,遵守NSCopying 协议的类可以发送copy消息,遵守NSMutab ...
- GPIO的8种模式详解
和stm32的GPIO相关的寄存器有 (1)两个32位的配置寄存器(GPIOX_CRL,GPIOX_CRH) 每一个IO占用4位,16个IO占用64位就是两个32为寄存器. 其中CNF[1:0]是用来 ...
- <item.../>元素可指定如下常用属性
android:id:为菜单项指定一个唯一表实.android:title:指定菜单项的标题.android:icon:指定菜单项的图标.android:alphabeticShortcut:为菜单项 ...
- 【转】listView中,checkBox的显示和隐藏
原文网址:http://www.cnblogs.com/vicma/p/3460500.html 在listView中,每个item都有一个ChexBox,当显示的时候在listView外面设置一个按 ...
- 精美实用的jQuery插件精选
jQuery的确是一款相当强大的Javascript框架,同时jQuery的插件就多入牛毛,如果你善于收集,那么你在写前端页面的时候肯定会更加方便.本文精选了一些精美实用的jQuery插件供大家参考. ...