/**
* 位图排序,思想来自《编程珠玑》。<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位图排序求交集的方法。分享给大家供大家参考,具体如下: 初始化一串全为0的二进制; 现有一串无序的整数数组; 如果整数x在这个整数数组当中,就将二进制串的第x位置为1; 然后顺序读取这...
输入:一个最多包含n个正整数的文件,每个数都小于n,其中n=10^7,。如果在输入文件中有任何整数重复出现就是致命错误。没有其他数据与该整数关联。 输出:按升序排列的输入整数列表。 约束:最多有(大约)1MB的...
在《编程珠玑》一书里提到了一种算法导论里没有提到过的位图排序方法,这种排序方法是通过牺牲空间效率来追求时间效率(线性时间)以达到时间-空间折中与双赢的目的。本文以实例形式简单讲一下位图排序思想。 一、...
位图排序算法的优势在于其时间复杂度为O(n),在内存开销方面,位图排序只需要足够的位数来表示数据集合中所有可能的值。不过,这种方法在某些情况下仍然存在限制,例如当输入文件中的整数范围非常大时,可能需要超过...
位图排序是一种特殊的排序算法,尤其适用于处理包含无重复元素的整数集合。该方法利用了计算机内存中的一位可以代表一个状态的事实,通常用于表示一个整数是否存在。位图排序的基本思想是创建一个与待排序数据最大值...
位图排序是一种使用位运算的高效排序方法,特别适合于排序那些可以表示为固定范围的整数数组。它通过建立一个位图,每一位对应一个数据值,然后依次检查每个数据值,并在位图上相应位置置为1,最终通过位图直接生成...
【部分内容】:介绍了使用位图排序解决十亿个QQ号判断问题的思路与方法。 在Java面试中,位图排序是一种有效的数据处理策略,特别是在处理大量数据且内存有限的情况下。本例中,问题是如何在一个十亿个QQ号的列表中...
位图法排序是一种在特定情况下效率较高的排序技术,尤其适用于数据范围相对较小的整数排序。这种方法基于位操作,利用数组来表示一个位图,其中每一位对应一个可能的数值。在Java中,虽然标准库中的排序算法如`...
根据给定的文件信息,我们可以总结出以下关于“二分法排序算法C语言实现”的相关知识点: ### 1. 二分法搜索算法原理 二分法搜索算法,也称为折半查找算法,是一种在有序数组中查找特定元素的搜索算法。其基本思想...
2. 不可对重复的数据进行排序和查找。 C# 中的 BitMap 实现 在 .NET 中已经实现了 BitMap 的数据结构——BitArray,我们可以直接使用官方的 BitArray 来解决问题。但是,我们也可以参照 .NET 源码实现一个简化版的...
然后,这些帧按照特定的帧率进行排序和组合,形成连续的动态画面。 4. **编程实现**:通常,这个过程可以通过编程语言如C++、Python或Java来实现,利用图像处理库如OpenCV、FFmpeg等。例如,在OpenCV中,可以使用...
`res`文件夹通常包含应用程序所需的资源,如位图、图标等,而`sortTest.dsw`是Visual Studio的工作空间文件,用于管理项目。 在MFC环境中,动态演示排序算法可能涉及到使用C++的绘图函数,如GDI(Graphics Device ...
1. ORDERUP.BMP和ORDERDW.BMP:这可能是两个位图文件,分别表示升序和降序的图标。在PowerBuilder中,可以将这些图标设置到DataWindow的列标题上,以视觉上指示当前的排序状态。 2. DWSORT.PBL:这是一个Power...
- .BMP 文件是位图图像文件,通常用于存储项目中的图标或图片资源。 - .CFG 文件是配置文件,可能包含了项目的设置和编译选项。 - .DCU 文件是编译后的单元文件,包含了编译过的Pascal源代码,是DELPHI编译后生成的...
在图像处理领域,有时我们需要分析位图(Bitmap)中的颜色分布,找出最常出现的颜色,这一过程称为“颜色直方图”分析。本主题将深入探讨如何使用不同的算法和技术来解决这个问题,包括位图的基本概念、颜色表示法、...