桶排序 Go语言实现经典算法


桶排序原理

桶排序 (Bucket sort)或所谓的箱排序的原理是将数组分到有限数量的桶子里,然后对每个桶子再分别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排序),最后将各个桶中的数据有序的合并起来。
桶排序原理图

效率

桶排序是常见排序里最快的一种,大部分情况下比快排还要快。
时间复杂度为O(N+K),空间复杂度也为O(N+K)

稳定性

桶排序是稳定排序

桶排序的Go语言实现代码

package main

import (
    "fmt"
    "time"
    "math/rand"
)

func bucketSort(numArr []int,bucketSize int){

    minValue := numArr[0]
    maxValue := numArr[0]

    for i := 0; i<len(numArr); i++ {
        if minValue > numArr[i] {
            minValue = numArr[i]
        }
        if maxValue < numArr[i] {
            maxValue = numArr[i]
        }
    }

    // 桶切片初始化
    bucketCount := make([][]int,(maxValue - minValue) / bucketSize +1)

    // 数据入桶
    for i := 0; i<len(numArr); i++ {
        bucketCount[(numArr[i] - minValue) / bucketSize] = append(bucketCount[(numArr[i] - minValue) / bucketSize] , numArr[i])
    }

    key := 0
    // 对每个桶进行排序,这里使用冒泡排序
    for _ , bucket := range bucketCount {
        if (len(bucket) <= 0) { continue; }
        insertionSort(bucket);
        for _ , value := range bucket {
            numArr[key] = value
            key = key+1
        }
    }
    return
}

func insertionSort(numArr []int){
    for i := 0; i < len(numArr); i++ {
        for j := 0; j < len(numArr)-1; j++ {
            if numArr[j] > numArr[j+1]{
                numArr[j],numArr[j+1] = numArr[j+1],numArr[j]
            }
        }
    }
}

// 桶排序
func main(){
    numArr := make([]int,10)
    rand.Seed(time.Now().UnixNano())

    for i:=0; i<len(numArr); i++ {
        numArr[i]=rand.Intn(100)
    }
    fmt.Println(numArr)
    bucketSort(numArr,10)
    fmt.Println(numArr)
}

本文发表于2019年12月17日 23:32
阅读 422 讨论 0 喜欢 0

讨论

周娱

君子和而不同
按照自己的方式,去度过人生

8027 3841101
抢先体验

扫码体验
趣味小程序
文字表情生成器

加入组织

扫码添加周娱微信
备注“加入组织”
邀请进开发群

闪念胶囊

人活一辈子,不是一年两年。时间是有连续性的,做抉择的时候要多看几步。保持警惕,大丈夫有所为,有所不为。

跟人接触,不要想:我能从你身上得到什么,要想:我能给你什么。 想通了,内核就稳了。

这个世界上,别人只会看你现在的样子而不是以后的样子。你以后的样子只有自己才相信。如果没有执行力,一切都是虚妄。

对普通人来说,人和人相处其实最重要的是感觉。感觉不好,你说什么都没用,怎么解释都没用,越说越错,反正最后不好的锅都往你身上扣。所谓“说你行你就行,不行也行。说你不行,你就不行,行也不行”就是这个意思。狼要吃人根本不需要理由,你也同样叫不醒装睡的人。遇到这种情况,早点闪人才是上策。不过大部分人的问题是没有闪人的心态,能力,和资源。

考985不牛逼,考上才牛逼。创业不牛逼,创业成功才牛逼。这个社会上很多人把目标当成牛逼的资本,牛逼哄哄的,死活不听劝,然后做的一塌糊涂,给别人添麻烦,让别人帮他料理后事,对此只能呵呵。

当你尝到用生气解决问题的甜头后,你就懒得再用其他方式了。你却忽略了,生气是鸩毒啊,剂量用够了,你的关系也玩完了。

年轻的时候你只搞事业不谈恋爱,等你事业有成了,钱相对自由了,你可能已经没有荷尔蒙了。

如果你经常雇佣比你矮小的人,将来我们就会变成矮人国,变成一家侏儒公司。相反,如果你每次都雇用比你高大的人,日后我们必能成为一家巨人公司。

如果一个人有充裕的时间去完成一项工作,那么他就会放慢节奏或者增加其他不必要的工作,直到花光所有的时间。

Copyright © 2016 - 2020 Cion.
All Rights Reserved.
备案:鲁ICP备19012333号-4.