基数排序是一种排序算法.它通过对相同位置的各个元素进行分组来对元素进行排序.然后根据元素的递增或递减顺序对元素进行排序.
1.使用场景:
大型数据集:
基数排序算法对于大型数据集非常有效.因为其他算法的开销对性能影响很大.
稳定排序:
基数排序算法是一种稳定的排序算法.
有限范围数据集:
基数排序算法非常适合取值范围有限的数据集.
2.实现:

2.1方法:
css
package itboStudy
// 基数排序.
func RadixSort(array []int) []int {
largestNum := findLargesNum(array)
size := len(array)
signficantDigit := 1
semiSorted := make([]int, size, size)
//循环直到达到最大有效数字.
for largestNum/signficantDigit > 0 {
//整数是十进制数.
bucket := [10]int{0}
//计算进入每个桶的数量.
for i := 0; i < size; i++ {
bucket[(array[i]/signficantDigit)%10]++
}
//添加前一个桶的计数.
for i := 1; i < 10; i++ {
bucket[i] += bucket[i-1]
}
//使用桶填充一个名为semiSorted数组.
for i := size - 1; i >= 0; i-- {
bucket[(array[i]/signficantDigit)%10]--
semiSorted[bucket[(array[i]/signficantDigit)%10]] = array[i]
}
for i := 0; i < size; i++ {
array[i] = semiSorted[i]
}
signficantDigit *= 10
}
return array
}
// 查找数组中最大的数.
func findLargesNum(array []int) int {
laegeNum := 0
for i := 0; i < len(array); i++ {
if array[i] > laegeNum {
laegeNum = array[i]
}
}
return laegeNum
}
2.2main方法:
css
func main() {
array := []int{33, 23, 56, 7, 8, 18, 99, 28}
radixSort := itboStudy.RadixSort(array)
fmt.Println(radixSort)
}
3.实战:
返回一个数组中两个连续元素之间的最大差值.
3.1方法:
//
func findLargesNum(array []int) int {
laegeNum := 0
for i := 0; i < len(array); i++ {
if array[i] > laegeNum {
laegeNum = array[i]
}
}
return laegeNum
}
// 基数排序.
func radixSortFunc(array []int) []int {
largest := findLargesNum(array)
size := len(array)
signficantDigit := 1
semiSorted := make([]int, size, size)
for largest/signficantDigit > 0 {
bucket := [10]int{0}
for i := 0; i < size; i++ {
bucket[(array[i]/signficantDigit)%10]++
}
for i := 1; i < 10; i++ {
bucket[i] += bucket[i-1]
}
for i := size - 1; i >= 0; i-- {
bucket[(array[i]/signficantDigit)%10]--
semiSorted[bucket[(array[i]/signficantDigit)%10]] = array[i]
}
for i := 0; i < size; i++ {
array[i] = semiSorted[i]
}
signficantDigit *= 10
}
return array
}
func MaxDifference(array []int) int {
if len(array) < 2 {
return 0
}
radixSortFunc(array)
ret := 0
for i := 1; i < len(array); i++ {
if tmp := array[i] - array[i-1]; tmp > ret {
ret = tmp
}
}
return ret
}
3.2main方法:
css
func main() {
array := []int{1, 6, 8, 16}
difference := itboStudy.MaxDifference(array)
fmt.Println(difference)
}
不是万事都要撞南墙.可以撞北墙东墙西墙.
如果大家喜欢我的分享的话.可以关注我的微信公众号
念何架构之路