前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Go语言 实现bitmap

Go语言 实现bitmap

作者头像
李海彬
发布2018-03-19 17:21:12
1.6K0
发布2018-03-19 17:21:12
举报
文章被收录于专栏:Golang语言社区Golang语言社区
代码语言:javascript
复制
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++
        }
    }
}
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2016-01-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Golang语言社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档