首页 > 编程语言 > 详细

go 基数排序

时间:2021-01-06 08:57:26      阅读:27      评论:0      收藏:0      [点我收藏+]
package main

import (
	"fmt"
)

func SelectSortMax(arr []int) int {
	arrLen := len(arr)
	if arrLen <= 1 {
		return arr[0]
	}else {
		max := arr[0]
		for i, _ := range arr{
			if arr[i] > max {
				max = arr[i]
			}
		}
		return max
	}
}

func RadixSort(arr []int) []int {
	max := SelectSortMax(arr)
	for bit := 1; max / bit > 0; bit *= 10 {
		arr = BitSort(arr, bit)
		fmt.Println(arr)
	}
	return arr
}
func BitSort(arr[]int, bit int) []int {
	arrLen := len(arr)
	bitcounts := make([]int, 10)
	for i := 0; i < arrLen; i++ {
		num := (arr[i]/bit) % 10
		bitcounts[num]++
	}
	for i := 1; i < 10; i++ {
		bitcounts[i]+= bitcounts[i-1]
	}
	tmp := make([]int, arrLen)
	for i := arrLen - 1; i >= 0; i-- {
		num := (arr[i] / bit) % 10
		tmp[bitcounts[num] - 1] = arr[i]
		bitcounts[num]--
	}
	for i := 0; i < arrLen; i++ {
		arr[i] = tmp[i]
	}
	return arr
}


func main() {
	arr := []int{11, 91, 222, 348, 878, 348, 7123, 4213, 6232, 1011, 1011, 1011, 1011, 1011, 7123, 7123, 7123, 7123, 7123, 7123, 7123, 7123, 7123, 7123, 7123, 7123}
	fmt.Println(RadixSort(arr))
}

  

go 基数排序

原文:https://www.cnblogs.com/xcx-bwt/p/14238587.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!