关于排序(简单)

   前两天从老赵的博客上翻出一个算法的讲座来听了听《盛大创新院赞助第二届.NET技术交流会 - 演讲录像及下载》,快到最后的时候讲师说了个他面试时碰见的面试题:4000个正整数,取第50大的那个,比较次数不超过4600次(没记错的话应该是这样)。讲师也说了他的解决方案和应该的解决方案,实话说都没听懂。

  下来我就找啊这个loser tree是啥,翻了翻数据结构和算法的书,不夸张地说我忘的很干净,怎么看怎么书上的东西都很陌生。看了一段时间以过后,本人突发奇想,为什么不封装一个类库呢,不管你是数组还是list<T>,你需要排序?ok,调我的类,我提供给你各种排序方式,只要传进来接回去就排好了,每种排序上面还要标明适用情况,适用数据量。正好自己还能重学一下数据结构和算法,以后用着也方便。

  工作之余跟构架部一个伙计聊天的时候,说了一下这个想法,那哥们很严肃的对我说想法很好,可惜微软已经实现了。让我去看Collections命名空间。

  于是就有了这篇博文,原谅我的无知吧,我真不知道还有SortedList,SortList<TKey,TValue>,SortDictionary<TKey,TValue>。

  简单的做个介绍,具体的msdn上都有

  他们的功能呢,都是把你依次插进去的值排序,插完数据后你再遍历的话,就是排好序的了,key值从小到大。

  他们几个的区别呢

  SortedList在System.Collections,非泛型,内部维护两个数组,foreach遍历的话需要用DictionaryEntry,

foreach (DictionaryEntry de in mySortedList) {...}

  SortList<TKey,TValue>,SortDictionary<TKey,TValue>,泛型,二叉搜索树,foreach遍历的话需要用KeyValuePair <TKey, TValue>。

SortedList<TKey, TValue>) 使用的内存比 SortedDictionary<TKey, TValue> 少。
SortedDictionary
<TKey, TValue> 可对未排序的数据执行更快的插入和移除操作:它的时间复杂度为 O(log n),而 SortedList<TKey, TValue> 为 O(n)。

 


  下面再上个简单的例子:

复制代码
代码
public static void RunSnippet()
{
SortedList
<int,String> list=new SortedList<int,String>();
list.Add(
2,"b");
list.Add(
1,"a");
list.Add(
5,"e");

foreach(KeyValuePair<int,String> kv in list)
{
Console.WriteLine(kv.Value);
}
}
复制代码
显示结果为:

a
b
e
  这个跟我想要的排序库还是有蛮大区别的,不过平时还是可以省很大事的,写下来提醒自己。写的跟水文区别不大,大家别扔鸡蛋!!!

  讲师说解决方案,如有高人能用c#给写一下,小弟将感激不尽!!

posted on   水一  阅读(463)  评论(0编辑  收藏  举报

编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述

导航

< 2010年12月 >
28 29 30 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31 1
2 3 4 5 6 7 8
点击右上角即可分享
微信分享提示