package com.myway.study;
/**
* 对10000000万个不重复数字排序
* User: zhangyong
* Date: 14-5-3
* Time: 下午6:23
* To change this template use File | Settings | File Templates.
*/
public class BitSortTest {
private static final int BITSPERWORD = 32; //整数位数
private static final int SHIFT = 5;
private static final int MASK = 0x1F; //5位遮蔽 0B11111
private static final int N = 10000000;
//用int数组来模拟位数组,总计(1 + N / BITSPERWORD)*BITSPERWORD位,足以容纳N
private static int[] a = new int[(1 + N / BITSPERWORD)];
public static void main(String[] args) {
bitsort(new int[]{1, 100, 2, 10000, 9999, 4567, 78902});
}
public static void bitsort(int[] array) {
for (int i = 0; i < N; i++)
clr(i); //位数组所有位清0
for (int i = 0; i < array.length; i++)
set(array[i]); //阶段2
for (int i = 0; i < N; i++)
if (test(i))
System.out.println(i);
}
//置a[i>>SHIFT]的第(i & MASK)位为1,也就是位数组的第i位为1
// 字节位置=数据/32;(采用位运算即右移5位)
// 位位置=数据%32;(采用位运算即跟0X1F进行与操作)。
public static void set(int i) {
a[i >> SHIFT] |= (1 << (i & MASK));
}
//置a[i>>SHIFT]的第(i & MASK)位为0,也就是位数组的第i位为0
public static void clr(int i) {
a[i >> SHIFT] &= ~(1 << (i & MASK));
}
//测试位数组的第i位是否为1
public static boolean test(int i) {
return (a[i >> SHIFT] & (1 << (i & MASK))) == (1 << (i & MASK));
}
}
分享到:
相关推荐
在ARM指令集中,当第二个操作数采用`#immed_8r`形式时,存在特定的常数表达式规定:“该常数必须对应8位位图,即常数是由一个8位的常数循环移位偶数位得到的。” **解释**: - **8位位图**:指该常数由一个8位的二...
**定义**:冒泡排序是一种简单的排序算法,通过重复遍历列表,比较相邻元素并交换它们来对数据进行排序。每次遍历都会把当前未排序的最大或最小元素“冒泡”到最后的位置。 **算法实现**: ```java public class Up...
特征:①每个数都是小于10000000的非负整数;②没有重复的数字;③数据之间不存在关联关系。 3.约束:①最多1MB的内存空间可用;②磁盘空间充足;③运行时间最多几分钟,最好是线性时间。 4.输出:按升序排列...
计算机算法课程的作业,用c++实现了归并排序和快速排序,并比较了两种算法的速度。测试数据为随机生成,可设置为10万、100万、1000万大小的数组。在代码中提供了详细的注释,在容易出错的地方进行了解释。下面是得到...
例如,如果我们要处理10000000个可能的号码,而不必为每个号码创建一个单独的变量,我们只需要大约312500个元素(10000000 / 32)的数组即可。这是因为每个元素能容纳32个不同的号码。 在给定的代码中,定义了几个...
此外,还给出了几个练习题,如将280000、32000000、40460000和640000分别改写成以万为单位的数,答案分别是28万、3200万、4046万和64万。 课堂检测部分包括了书面练习和排序练习。书面练习涉及将数字改写成万为单位...
Python 排序容器Sorted Containers是一个 Apache2 许可的排序集合库,用纯 Python 编写,速度与 C 扩展一样快。Python 的标准库非常棒,直到您需要一个排序集合类型为止。许多人会证明,没有它,您也能走得很远,但...
产生10000-10000000的随机数 并写入TXT文档中
这篇PPT课件是针对新苏教四年级数学下册的内容,主要讲解了如何认识含有万级和个级的数,以及如何读写这些数。以下是详细的解释: 首先,了解数位的概念,数位分为个级和万级,个级包括个、十、百、千这四个位,而...
吸血鬼算法 吸血鬼算法是指一种特殊的算法,它...在给定的代码中,作者使用Java语言编写了一个吸血鬼算法,使用了冒泡排序算法对字符串进行排序,并使用了条件语句来判断数字是否可以分解成两个相同长度的数字乘积。
π是一个无理数,意味着它不能表示为两个整数的比,并且其小数部分无限不循环。 #### 二、π的历史与文化背景 自古以来,人类就对圆的周长与直径之间的关系感到好奇。早在公元前2000年左右,古巴比伦人就已经能够...
这是一种效率较高的方法,通过两个变量分别保存前两个斐波那契数,不断更新这两个变量,直到计算出第n个斐波那契数。时间复杂度是O(n)。 6. **闭式公式**: 斐波那契数列有一个公式Fn = (1/sqrt(5)) * [((1+sqrt...
综合题第十四题要求学生利用5、0、0、6这四个数字组成不同的数,并给出最大、最小的四位数,以及只读一个“0”和不读“0”的数。最后,第六题的应用题通常需要学生根据图片信息列示计算,可能涉及到加减法。 这个...
- 100个十万等于10000000,1亿等于100个一百万。 6. **实际问题应用**: - 我国约14亿人,若每天20人节约一度电,全国一天可节约70000000度电,一个月(30天)可节约210000000度电。 7. **数的近似和四舍五入**...
每行输入一个整数N(N<=10000000),这个数就是你需要把它表示成四个素数之和的数,输入0则表示结束。 输出 对于每个非零的输入,程序都有一个输出行,每行包含符号要求的四个素数。如果这个数不能表示为四个素数...
一个八位数字可以表示从00000000到99999999,总共10000000个不同的数字。在计算机科学中,数字通常与二进制、八进制、十进制和十六进制等表示法关联。八位数字在二进制系统中对应于32位(因为2^8 = 256,但在这里...
15. 写整万的数时,只需要写出万级上的数是不完整的,还要在后面加四个0。 16. 最高位是百万位的数确实是一个七位数。 知识点6:数的读写与组成 17. 组数练习: - 最小的七位数是将数字从小到大排列,即1000007。 ...
这篇文档是四年级数学上册第一单元的复习试题,涵盖了大数的认识、数位、计数单位、读数、写数、数的改写、四舍五入、比较数的大小等多个知识点。...25. **数的排序**:8006万>8500>8050万>8005万>8540>8504>1亿。