位图方法排序
来源:互联网 发布:淘宝花呗还款有利息吗 编辑:程序博客网 时间:2024/04/30 08:39
要使用位图方法排序,有三个前提条件:
1. 元素是整数
2. 集合内的最大上限数是已知的
3. 元素是唯一的
位图的方法原理:略。
其时间复杂度是 O(n),所以排序方法会非常快。
以下给出JAVA代码:
public class MyMath {
private static final int SHIFT = 5 ; // int型,32位,则移位数为 5
private static final int BIT_MOD = 31;
public static void bitOrder(int[] digits,int max){
int[] bits = new int[ (max >> SHIFT) + 1 ];
// 把数组的数设置相应位的值为1
for (int i = 0; i < digits.length; i++) {
setBit(bits,digits[i]);
}
// 顺序拿出位值为1的位,复制给数组,即排序完成。
int orderIndex = 0;
for (int i = 0; i < bits.length; i++) {
for(int bi=0; bi<=BIT_MOD; bi++){
if( isBit1(bits[i],bi) ){
digits[orderIndex] = bi + ( i << SHIFT );
orderIndex++;
}
}
}
assert digits.length == orderIndex : "长度不匹配,算法有误";
}
// 设置位
public static void setBit(int[] dest, int number){
dest[number >> SHIFT] |= (1 << (number & BIT_MOD) );
}
// 判断位是否为1
public static boolean isBit1(int number, int bi){
return (number & 1<<bi) == (1<<bi) ;
}
}
备注:位图方法除了排序后,还能给集合内的元素去重。
另外若元素有重复的,此排序算法可作相应的改变。(有兴趣的朋友自行研究)
1.
2.
3.
位图的方法原理:略。
其时间复杂度是 O(n),所以排序方法会非常快。
以下给出JAVA代码:
public class MyMath {
}
备注:位图方法除了排序后,还能给集合内的元素去重。
另外若元素有重复的,此排序算法可作相应的改变。(有兴趣的朋友自行研究)
- 位图方法排序
- 位图排序
- 位图排序
- 位图排序
- 位图排序
- 位图排序
- 位图排序
- 位图排序
- 位图排序
- 位图排序
- 位图排序
- 位图排序
- 位图排序
- 位图排序
- 位图排序
- 位图排序
- 位图排序
- 位图排序
- office办公技巧相关知识
- 一分钟对我们的重要意义
- Ext-grid-Panel
- zencart怎么装插件
- QPainter类的使用
- 位图方法排序
- 记下 自己学习 tinyxml 的事情
- vs2010 使用STLport-5.2.1
- hdu 1503 DP
- Machine Learning(五—2)神经网络学习
- 高手们的播客
- 关于AIX VG中 LV 的状态问题,LV STATE
- ------79事件---------
- Hadoop and Sort Benchmark