利用位图数据结构实现排序,利用每一位的下标作为索引,每位的值作为属性值,可以表示存在或不存在,适合存储稠密的数据,排序遍历的范围会是索引的最大值

最后发现耗时比python中list自带的sort多,

 # -*- coding:utf-8 -*-
 import time
 class BitMap:                                   #位图
         def __init__(self,size):
                 self.size = size
                 self.byteSize = (size-1)/32+2
                 self.array = [0 for i in range(self.byteSize)]

         def set(self,bit):
                 index=bit >> 5
                 bit = 31 - bit & 31
                 p = 1 << bit
                 self.array[index] = self.array[index] | p

         def cls(self,bit):
                 index=bit >> 5
                 bit = 31 - bit & 31
                 p = ~ (1 << bit)
                 self.array[index] = array[index] & p

         def get(self,bit):
                 index=bit >> 5
                 bit = 31 - bit & 31
                 p = 1 << bit
                 n=self.array[index] & p
                 n = n >> bit
                 return n

 Num = 10000000
 a = BitMap(Num)
 fr = open("out.txt","r")
 out = open('new1.txt',"w")
 Str = fr.read()
 List = str.split(Str,' ')
 start = time.clock()

 for i in range(len(List)-1):
         List[i]=int(List[i])
         a.set(List[i])
 for i in range(Num+1):
     if a.get(i):
         out.write(str(i)+' ')
 '''
 for i in range(len(List)-1):
         List[i]=int(List[i])
 List.sort()
 for i in List:
         out.write(str(i))
         out.write(' ')
 '''
 end = time.clock()
 print '位图排序:',end - start
 fr.close()
 out.close()

精简版ADT实现

 #define BITSPERWORF 32
 #define SHIFT 5
 #define MASK 0x1f
 #define N 1e7
 +N/BITSPERWORF]

 void set(int i){
     a[>>SHIFT] |= (<<(i&MASK));
 }
 void clr(int i){
     a[>>SHIFT] &= ~(<<(i&MASK));
 }
 void test(int i){
     >>SHIFT] & (<<(i&MASK));
 }

ADT-位图的更多相关文章

  1. SQLSERVER中NULL位图的作用

    SQLSERVER中NULL位图的作用 首先感谢宋沄剑提供的文章和sqlskill网站:www.sqlskills.com,看下面文章之前请先看一下下面两篇文章 SQL Server误区30日谈-Da ...

  2. Android Studio vs. Eclipse ADT Comparison

    Android Studio 是一个新的基于 IntelliJ IDEA Android 的安卓开发环境,它对 Eclipse ADT 进行了改进并新增了功能. Feature Android Stu ...

  3. Oracle位图索引

    索引由KEY和Data组成 位图索引的KEY比普通非唯一性索引多包含一个组成部分,分区,分区是将数据按行由内部机制分段以达到比较好的检索效率 位图索引的Data中,该索引KEY中数据值在分区段中按行分 ...

  4. 基于位图(Bitmap、BitmapData)的图片处理方法(C#)

    目前操作位图的主流方法有三种: 1.基于Bitmap像素的处理方法,以GetPixel()和SetPixel()方法为主.方法调用简单,但是效率偏低. 2.基于内存的像素操作方法,以System.Ru ...

  5. ADT - Eclipse 常用快捷键

    ADT - Eclipse 常用快捷键 Alt + / : 自动补全 F3 : 打开类的源码 Ctrl + D : 删除选中行 Ctrl + 1 : 自动弹出修改建议 Ctrl + Shift + J ...

  6. ADT for Eclipse无法升级到23.0的解决方法(确保您的网络能够访问google的地址)

    进行以下步骤时,请确保您的网络能够访问google的地址,因为有可能是无法访问google地址导致无法升级,该文不是为了解决这个问题!!! 最近一次的升级,ADT无法从ADT 22.X升级到23.0. ...

  7. 搭建Android开发环境附图详解+模拟器安装(JDK+Eclipse+SDK+ADT)

    ——搭建android开发环境的方式有多种,比如:JDK+Eclipse+SDK+ADT或者JDK+Eclipse+捆绑好的AndroidSDK或者Android Studio. Google 决定将 ...

  8. ADT + JNI实例

    Author: Maddock Date: 2015-07-09 本文简单记录了Android中利用jni开发程序初级教程: 步骤 1 下载安装ADT 2 配置NDK 3 新建安卓工程 4 测试jni ...

  9. 【读书笔记】《编程珠玑》第一章之位向量&位图

    此书的叙述模式是借由一个具体问题来引出的一系列算法,数据结构等等方面的技巧性策略.共分三篇,基础,性能,应用.每篇涵盖数章,章内案例都非常切实棘手,解说也生动有趣. 自个呢也是头一次接触编程技巧类的书 ...

  10. Windows下ADT环境搭建

    1.JDK安装 下载JDK(点我下载),安装成功后在我的电脑->属性->高级->环境变量->系统变量中添加以下环境变量: JAVA_HOME值为C:\Program Files ...

随机推荐

  1. Android菜单详解(一)——理解android中的Menu

    前言 今天看了pro android 3中menu这一章,对Android的整个menu体系有了进一步的了解,故整理下笔记与大家分享. PS:强烈推荐<Pro Android 3>,是我至 ...

  2. Big Data Security Part One: Introducing PacketPig

    Series Introduction Packetloop CTO Michael Baker (@cloudjunky) made a big splash when he presented ‘ ...

  3. CSS之Position详解

    CSS的很多其他属性大多容易理解,比如字体,文本,背景等.有些CSS书籍也会对这些简单的属性进行大张旗鼓的介绍,而偏偏忽略了对一些难缠的属性讲解,有避重就轻的嫌疑.CSS中主要难以理解的属性包括盒型结 ...

  4. PADS Layout将导入DXF,并转换成板框步骤

    1.在PADS Layout中选择 Import... 2.选择DXF文件(一般由结构工程师给出),直接点OK即可. 3.导入后,板框图一角视图如下.右键选择 Select Shapes,然后双击外框 ...

  5. USACO6.5-Closed Fences:计算几何

    Closed Fences A closed fence in the plane is a set of non-crossing, connected line segments with N c ...

  6. HDU-1047(DP-二进制状态压缩)

    Problem Description Ignatius has just come back school from the 30th ACM/ICPC. Now he has a lot of h ...

  7. java 枚举类型

    原来枚举类型还可以这样玩... public enum Tenum { None(1),ByteArray(2),List(3),Map(4); private int id; private Ten ...

  8. iOS单元测试(作用及入门提升)

    由于只是一些简单实用的东西,学学还是挺不错的.其实单元测试用的好,开发起来也会快很多.单元测试对于我目前来说,就是为了方便测试一些功能是否正常运行,还有调试接口是否能正常使用.有时候你可能是为了测试某 ...

  9. Linux命令之exit

    本文链接:http://codingstandards.iteye.com/blog/836625   (转载请注明出处) 用途说明 exit命令用于退出当前shell,在shell脚本中可以终止当前 ...

  10. Android 监听wifi广播的两种方式

    1.XML中声明 <receiver android:name=".NetworkConnectChangedReceiver" >             <i ...