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万。 课堂检测部分包括了书面练习和排序练习。书面练习涉及将数字改写成万为单位...
这篇PPT课件是针对新苏教四年级数学下册的内容,主要讲解了如何认识含有万级和个级的数,以及如何读写这些数。以下是详细的解释: 首先,了解数位的概念,数位分为个级和万级,个级包括个、十、百、千这四个位,而...
产生10000-10000000的随机数 并写入TXT文档中
吸血鬼算法 吸血鬼算法是指一种特殊的算法,它...在给定的代码中,作者使用Java语言编写了一个吸血鬼算法,使用了冒泡排序算法对字符串进行排序,并使用了条件语句来判断数字是否可以分解成两个相同长度的数字乘积。
π是一个无理数,意味着它不能表示为两个整数的比,并且其小数部分无限不循环。 #### 二、π的历史与文化背景 自古以来,人类就对圆的周长与直径之间的关系感到好奇。早在公元前2000年左右,古巴比伦人就已经能够...
这是一种效率较高的方法,通过两个变量分别保存前两个斐波那契数,不断更新这两个变量,直到计算出第n个斐波那契数。时间复杂度是O(n)。 6. **闭式公式**: 斐波那契数列有一个公式Fn = (1/sqrt(5)) * [((1+sqrt...
综合题第十四题要求学生利用5、0、0、6这四个数字组成不同的数,并给出最大、最小的四位数,以及只读一个“0”和不读“0”的数。最后,第六题的应用题通常需要学生根据图片信息列示计算,可能涉及到加减法。 这个...
另一个例子,由8个千万、7个十万、5个千和4个一组成的数,应写作80705004,其中8000万加上70万等于8070万。 现在我们来练习写数: 1. 九千九百九十九万,写为99990000。 2. 九千零九十万九千零九十,写为90909090。...
- 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。 ...