• 位图排序


    位图排序: 适合数量较多的整数集合排序。

    原理  定义位组,如果整数i存在,则将位组的第i位置为1,以记录其存在。然后位组遍历,确定排序。

    Code

      

     1 import java.io.*;
     2 import java.util.*;
     3 public class Main {
     4     
     5     
     6 public static void main(String[] argc) throws IOException{
     7 
     8         Main test = new Main();
     9         String largeFileName = "d:\File_test\old.txt";
    10         String destlargeFileName = "d:\File_test\new.txt";
    11         test.perform(largeFileName, 100, destlargeFileName,true);
    12 }
    13     
    14 
    15 private BitSet bits;
    16 public void perform( String largeFileName,int total, String destLargeFileName,boolean asc) throws IOException {
    17 System.out.println("BitmapSort Started.");
    18  long start = System.currentTimeMillis();
    19  bits = new BitSet(total);
    20  FileWriter fw=new FileWriter(new File(destLargeFileName));
    21  BufferedWriter  largeOut=new BufferedWriter(fw);
    22  File fr = new File(largeFileName);
    23  BufferedReader largeIn = new BufferedReader(new FileReader(fr));
    24  
    25 // OutputStreamWriter osw=new OutputStreamWriter(fos, "UTF-8");
    26 //BufferedWriter  bw=new BufferedWriter(osw);
    27  Integer data;
    28  int off = 0;
    29  try {
    30  while (true) {
    31  String Data = largeIn.readLine();
    32  if (Data == null)
    33  break;
    34  data = Integer.parseInt(Data);
    35  int v = data;
    36  set(v);
    37  off++;
    38  }
    39  largeIn.close();
    40  int size = bits.size();
    41  System.out.println(String.format("lines : %d ,bits : %d", off, size));
    42  if(asc) {
    43      for (int i = 0; i < size; i++) {
    44      if (get(i)) {
    45          largeOut.write(String.valueOf(i)+"
    ");
    46          largeOut.write("	
    ");
    47      }
    48      }
    49  }
    50  largeOut.close();
    51  long stop = System.currentTimeMillis();
    52  long elapsed = stop - start;
    53  System.out.println(String.format("BitmapSort Completed.elapsed : %dms",elapsed));
    54  }
    55  finally {
    56  largeIn.close();
    57  largeOut.close();
    58      } 
    59  }
    60 
    61 private void set(int i) {
    62  bits.set(i);
    63  }
    64 private boolean get(int v) {
    65  return bits.get(v);
    66  }
    67 }
  • 相关阅读:
    ecshop 整合 kindedotor
    css 一些小笔记
    linux 使用 随记录
    GIPZ 压缩
    js 代码 随记
    map和list循环遍历
    向数据库批量处理事件
    链表和数组的优劣比较
    内存对齐 和 sizeof小结
    C++的默认构造函数与构造函数
  • 原文地址:https://www.cnblogs.com/udld/p/4667921.html
Copyright © 2020-2023  润新知