`
tiandizhiguai
  • 浏览: 45627 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

位图排序

 
阅读更多
/**
 * 位图排序,思想来自《编程珠玑》。<br>
 * (功能详细描述)<br>
 * @see          相关函数,对于重要的函数建议注释
 * @since        iNOC V200R003C00, 2012-2-20
 * @param args
 */
public class BitSort
{
    public static void main(String[] args)
    {
        generateRandom();
        
        bitSort();

    }
    
    /**
     * 
     * 生成随机数,并写入文件。<br>
     * (功能详细描述)<br>
     
     * @see          相关函数,对于重要的函数建议注释
     * @since        iNOC V200R003C00, 2012-2-21
     */
    public static void generateRandom()
    {
        BufferedWriter writer = null;
        
        Random random = new Random();
        int num = 0;
        StringBuilder nums  = new StringBuilder();
        
        for(int i = 0; i < 500000; i++)
        {
            num = random.nextInt(500000);
            
            if(num > -1)
            {
                nums.append(num);
                nums.append("\n");
            }
        }

        try
        {
            writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("random.txt")));
            writer.write(nums.toString());
            writer.flush();
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
        finally
        {
            try
            {
                writer.close();
            }
            catch (IOException e)
            {
                e.printStackTrace();
            }
        }
    }
    
    /**
     * 
     * 读取文件的数据,排序,并写入另一个文件。<br>
     * (功能详细描述)<br>
     
     * @see          相关函数,对于重要的函数建议注释
     * @since        iNOC V200R003C00, 2012-2-21
     */
    public static void bitSort()
    {
        BitSet bitSet = new BitSet(1000000);
        
        try
        {
            BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream("random.txt")));
            char[] buffer = new char[10000];
            int bufferSize = -1;
            StringBuilder nums = new StringBuilder();
            
            while(-1 != (bufferSize = reader.read(buffer)))
            {
                nums.append(buffer, 0, bufferSize);
            }
            
            String[] tempNums = nums.toString().split("\n");
            
            for(String num : tempNums)
            {
                bitSet.set(Integer.valueOf(num));
            }
            
            nums = new StringBuilder();
            
            for(int i = 0; i < bitSet.length(); i++)
            {
                if(bitSet.get(i))
                {
                    nums.append(i);
                    nums.append("\n");
                }
            }
            
            BufferedWriter writer = null;
            
            try
            {
                writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("random2.txt")));
                writer.write(nums.toString());
                writer.flush();
            }
            catch (IOException e)
            {
                e.printStackTrace();
            }
            finally
            {
                try
                {
                    writer.close();
                }
                catch (IOException e)
                {
                    e.printStackTrace();
                }
            }
        }
        catch (FileNotFoundException e)
        {
            e.printStackTrace();
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
    }

}


分享到:
评论

相关推荐

    位图排序《编程珠玑》

    实现位图排序,其中假设n为10 000 000,且输入文件包含1 000 000个正数;具体细节详见《编程珠玑》第一章问题; 由于数据的大小问题,在这#define N 1000,即数据在1000以内的100个数据,进行排序(当然由于随机数...

    PHP实现bitmap位图排序与求交集的方法

    本文实例讲述了PHP实现bitmap位图排序求交集的方法。分享给大家供大家参考,具体如下: 初始化一串全为0的二进制; 现有一串无序的整数数组; 如果整数x在这个整数数组当中,就将二进制串的第x位置为1; 然后顺序读取这...

    编程珠玑之位图排序

    输入:一个最多包含n个正整数的文件,每个数都小于n,其中n=10^7,。如果在输入文件中有任何整数重复出现就是致命错误。没有其他数据与该整数关联。 输出:按升序排列的输入整数列表。 约束:最多有(大约)1MB的...

    C++实现位图排序实例

    在《编程珠玑》一书里提到了一种算法导论里没有提到过的位图排序方法,这种排序方法是通过牺牲空间效率来追求时间效率(线性时间)以达到时间-空间折中与双赢的目的。本文以实例形式简单讲一下位图排序思想。 一、...

    位图数据结构在排序算法中的应用.pdf

    位图排序算法的优势在于其时间复杂度为O(n),在内存开销方面,位图排序只需要足够的位数来表示数据集合中所有可能的值。不过,这种方法在某些情况下仍然存在限制,例如当输入文件中的整数范围非常大时,可能需要超过...

    用位图排序无重复数据集实例代码(C++版)

    位图排序是一种特殊的排序算法,尤其适用于处理包含无重复元素的整数集合。该方法利用了计算机内存中的一位可以代表一个状态的事实,通常用于表示一个整数是否存在。位图排序的基本思想是创建一个与待排序数据最大值...

    个人针对学习几种排序算法的总结

    位图排序是一种使用位运算的高效排序方法,特别适合于排序那些可以表示为固定范围的整数数组。它通过建立一个位图,每一位对应一个数据值,然后依次检查每个数据值,并在位图上相应位置置为1,最终通过位图直接生成...

    你要找的这里~滴滴滴1

    【部分内容】:介绍了使用位图排序解决十亿个QQ号判断问题的思路与方法。 在Java面试中,位图排序是一种有效的数据处理策略,特别是在处理大量数据且内存有限的情况下。本例中,问题是如何在一个十亿个QQ号的列表中...

    Java 位图法排序的使用方法

    位图法排序是一种在特定情况下效率较高的排序技术,尤其适用于数据范围相对较小的整数排序。这种方法基于位操作,利用数组来表示一个位图,其中每一位对应一个可能的数值。在Java中,虽然标准库中的排序算法如`...

    二分法排序算法 C语言实现

    根据给定的文件信息,我们可以总结出以下关于“二分法排序算法C语言实现”的相关知识点: ### 1. 二分法搜索算法原理 二分法搜索算法,也称为折半查找算法,是一种在有序数组中查找特定元素的搜索算法。其基本思想...

    c# 实现位图算法(BitMap)

    2. 不可对重复的数据进行排序和查找。 C# 中的 BitMap 实现 在 .NET 中已经实现了 BitMap 的数据结构——BitArray,我们可以直接使用官方的 BitArray 来解决问题。但是,我们也可以参照 .NET 源码实现一个简化版的...

    BMP位图转换AVI视频例程

    然后,这些帧按照特定的帧率进行排序和组合,形成连续的动态画面。 4. **编程实现**:通常,这个过程可以通过编程语言如C++、Python或Java来实现,利用图像处理库如OpenCV、FFmpeg等。例如,在OpenCV中,可以使用...

    mfc实现排序算法的动态演示 (源程序)

    `res`文件夹通常包含应用程序所需的资源,如位图、图标等,而`sortTest.dsw`是Visual Studio的工作空间文件,用于管理项目。 在MFC环境中,动态演示排序算法可能涉及到使用C++的绘图函数,如GDI(Graphics Device ...

    pb 点击标题排序 title order powerbuild9

    1. ORDERUP.BMP和ORDERDW.BMP:这可能是两个位图文件,分别表示升序和降序的图标。在PowerBuilder中,可以将这些图标设置到DataWindow的列标题上,以视觉上指示当前的排序状态。 2. DWSORT.PBL:这是一个Power...

    能够自动排序的源代码适合初学者下载

    - .BMP 文件是位图图像文件,通常用于存储项目中的图标或图片资源。 - .CFG 文件是配置文件,可能包含了项目的设置和编译选项。 - .DCU 文件是编译后的单元文件,包含了编译过的Pascal源代码,是DELPHI编译后生成的...

    寻找位图中出现频次最多的颜色

    在图像处理领域,有时我们需要分析位图(Bitmap)中的颜色分布,找出最常出现的颜色,这一过程称为“颜色直方图”分析。本主题将深入探讨如何使用不同的算法和技术来解决这个问题,包括位图的基本概念、颜色表示法、...

Global site tag (gtag.js) - Google Analytics