专栏首页Golang语言社区Go语言 实现bitmap

Go语言 实现bitmap

package main
import (
    "fmt"
    "math"
    "math/rand"
    "unsafe"
)
const (
    size = 100
)
func main() {
    test_sort()
}
func test_sort() {
    arr := make([]int, size) // int占4字节,100个就占用占用400字节,3200位
    for i := 0; i < len(arr); i++ {
        arr[i] = rand.Intn(size)
    }
    print_array(arr)
    newarr := bitmap_sort(arr)
    print_result(newarr)
}
func print_array(arr []int) {
    fmt.Printf("array:")
    for i := 0; i < len(arr); i++ {
        fmt.Printf(" %d", arr[i])
    }
    fmt.Printf("\n")
}
//内存少数据最大值小可以采用方式,位排序
func bitmap_sort(arr []int) (newarr []int) {
    var left uint32
    size := int(unsafe.Sizeof(arr[0]) * 4)
    newarr = make([]int, len(arr))
    for i := 0; i < len(arr); i++ {
        index := arr[i] / size
        left = uint32(arr[i] % size)
        leftvalue := newarr[index] & (int(math.Pow(2.0, float64(left))) - 1)
        newarr[index] = (newarr[index] >> left)
        if (newarr[index] & 1) == 0 {
            newarr[index] += 1
        }
        newarr[index] = (newarr[index] << left) + leftvalue
    }
    return newarr
}
func print_result(arr []int) {
    index := 0
    size := int(unsafe.Sizeof(arr[0]) * 4)
    fmt.Printf("new array:")
    for i := 0; i < len(arr); i++ {
        for j := 0; j < size; j++ {
            bit := arr[i] & 1
            if bit != 0 {
                fmt.Printf(" %d", index)
            }
            arr[i] = arr[i] >> 1
            index++
        }
    }
}

本文分享自微信公众号 - Golang语言社区(Golangweb)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2016-01-11

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 关于Golang语言数组索引的有趣现象

    在Twitter上看到Dave Cheney提了个pop quiz 勾起了我的好奇心,可以猜下下面这段代码的运行结果。 package main impor...

    李海彬
  • 关于Golang语言数组索引的有趣现象

    在Twitter上看到Dave Cheney提了个pop quiz 勾起了我的好奇心,可以猜下下面这段代码的运行结果。 package main impor...

    李海彬
  • 2018.11月Go优质开源项目

    项目描述:Build cross-platform modern desktop apps in Go + HTML5

    李海彬
  • 常用的sort打乱数组方法真的有用?

    mcq
  • JavaScript去除数组中重复的数字

    hankleo
  • LeetCode111|独一无二的出现次数

    键值对HashMap的重要性真的是不言而喻的,因为它应用的太广泛了,可以说基本上你做应用就是使用它,和ArrayList的次数相差不大,所以你现在如果不懂的话,...

    后端Coder
  • 算法面试经常需要你手写的三个排序算法(Python语言)

    五分钟学算法
  • 动手抓取搜狗搜索引擎壁纸API接口

    墨渊
  • Spark和Scala当中的collect方法的用法和例子

    collect: 收集一个弹性分布式数据集的所有元素到一个数组中,这样便于我们观察,毕竟分布式数据集比较抽象。Spark的collect方法,是Action类型...

    马克java社区
  • “法天象而应四时”--茶话软件开发之“抽象”

    抽象不仅仅是软件领域,在有灵性的生物中都有抽象; 抽象不仅仅是OO的,非OO语言也有抽象; 抽象的级别: 类级别的抽象--类、抽象类、接口; 方法、函数级别的抽...

    用户1177503

扫码关注云+社区

领取腾讯云代金券