linux社区爱心援助Linux认证系列教程业界动态站务新闻公司招聘建议留言网址大全LPI专题CISCO专题
设为首页
加入收藏
管理团队
JSP  
JAVA  
PERL  
 您的位置:首页 > 开发语言 > asp.net >
栏目导栏
  php
  JSP
  ASP
  asp.net
  JAVA
  c/c++/c#
  perl
  JavaScript
  Basic
  Delphi
资料搜索
热门文章
·NetBPM工作流的一个示例:请假
·asp.net正则表达式语法
·Office Web Components(OWC)绘
·asp.net ajax客户端编程+jquer
·asp.net 2.0 ajax中使用PopupC
·数据源为空时如何让GridView显
·如何让UpdatePanel支持文件上传
·Ado.Net读取Excel常见问题总结
·Brettle.Web.NeatUpload.dll支
·C#.Net的常见面试试题和参考答
·如何使IE的后退按钮无效
·ASP.NET DEMO 15: 同时支持行单
·ASP.NET使用Cookie
·asp.net 2.0 ajax中实现弹出窗
·如何在ASP.NET中用OWC绘制图表
最新文章
·Ajax Control Toolkit Animati
·讨论一下类似BlogEngine内一次
·使用CSS+SiteMap+UserControl+
·Asp.net中多彩下拉框的实现
·浅谈ASP.NET的Postback
·分清ASP.NET AJAX中的Extender
·Tip:在使用AjaxControlTookit
·有关注册DataItem的一些可能被
·IIRF(Ionic's Isapi Rewrite
·asp.net 客户端回调功能的实现
·关于控件部分的看法--读Progra
·为什么在vista上做开发
·如何封装JS和CSS文件为服务器端
·岂今我看过的最强的排序算法
·设计模式学习笔记之单件模式
Google
 
岂今我看过的最强的排序算法
[ 作者:  加入时间:2007-12-13 15:54:05  来自:Linux联盟收集整理 ]
1//位图排序法,时空高效的至高境界 tqfLinux联盟
   2#include <cstdio> tqfLinux联盟
   3 tqfLinux联盟
   4#define BITSPERWORD 32 tqfLinux联盟
   5#define SHIFT 5 tqfLinux联盟
   6#define MASK 0x1F tqfLinux联盟
   7#define N 10000000 tqfLinux联盟
   8int a[1 + N/BITSPERWORD]; tqfLinux联盟
   9 tqfLinux联盟
  10void set(int i){ tqfLinux联盟
  11 a[i >> SHIFT] |= (1<<(i & MASK)); tqfLinux联盟
  12} tqfLinux联盟
  13 tqfLinux联盟
  14void clr(int i){ tqfLinux联盟
  15 a[i >> SHIFT] &= ~(1<<(i & MASK)); tqfLinux联盟
  16} tqfLinux联盟
  17 tqfLinux联盟
  18int test(int i){ tqfLinux联盟
  19 return a[i >> SHIFT] & (1<<(i & MASK)); tqfLinux联盟
  20} tqfLinux联盟
  21 tqfLinux联盟
  22int main(void) { tqfLinux联盟
  23 int i; tqfLinux联盟
  24 for (i = 0; i < N; i++) { tqfLinux联盟
  25 clr(i); tqfLinux联盟
  26 } tqfLinux联盟
  27 //while (scanf("%d", &i) != EOF) { tqfLinux联盟
  28 // set(i); tqfLinux联盟
  29 //} tqfLinux联盟
  30 for (int j = 0; j < 3; j++) { //供简单的正确性测试 tqfLinux联盟
  31 scanf("%d", &i); //注意,输入的数不能重复 tqfLinux联盟
  32 set(i); //否则当只输入一次 tqfLinux联盟
  33 } tqfLinux联盟
  34 for (i = 0; i < N; i++) { tqfLinux联盟
  35 if (test(i)) tqfLinux联盟
  36 printf("%d\n", i); tqfLinux联盟
  37 } tqfLinux联盟
  38 return 0; tqfLinux联盟
  39} tqfLinux联盟
  为什么说这个算法时空效率达到及致呢?我们对100万个不重复的正整数(1000000以内)的文件进行测试: tqfLinux联盟
   tqfLinux联盟
   系统排序 C++/STL.set C/qsort C/位图 tqfLinux联盟
  总时间(s) 89 38 12.6 10.7 tqfLinux联盟
  计算时间(s) 79 28 2.4 0.5 tqfLinux联盟
  内存使用(MB) 0.8 70 4 1.25 tqfLinux联盟
  (本测试数据是在较旧的电脑上测试的,但还是体现性能的差距) tqfLinux联盟
    第一行是总时间,第二行的计算时间是总时间减去数据读取耗时10.2秒。虽然通用C++程序使用内存和CPU时间是专用C程序(C/位图)的50倍,但是它的使用仅需要一半的代码,并能很容易扩展到其他问题上,这也是专用C程序最大的缺点吧。 tqfLinux联盟
    下文回复还有网友提供的Bitmap排序的C#版,我还没有进行性能测试,估计性能也是很好的,而且那样的程序扩展性显然强很多。 Linux联盟收集整理 ,转贴请标明原始链接,如有任何疑问欢迎来本站Linux论坛讨论
评论】【加入收藏夹】【 】【打印】【关闭
※ 相关链接
 ·冒跑排序算法函数bubblesort()的实现  (2007-06-04 12:18:18)