开源地址

​https://gitee.com/lblbc/simple-works/tree/master/sort/​

覆盖语言:C、C++、C#、Java、Kotlin、Dart、Go、JavaScript(JS)、TypeScript(TS)、ArkTS、swift、PHP。
覆盖平台:安卓(Java、Kotlin)、iOS(SwiftUI)、Flutter(Dart)、Window桌面(C#)、前端(微信小程序、uni-app、vue)、后端(Java、Kotlin、NodeJS、Python、PHP、Go、C、C++)、鸿蒙

17种编程语言实现排序算法-基数排序_Math


17种编程语言实现排序算法-基数排序_排序算法_02

1. 安卓Java版

开发工具:​​下载Android Studio​​

private static void sort(int[] array) {
int max = getMaxValue(array);
for (int exp = 1; max / exp > 0; exp *= 10)
countSort(array, exp);
}

private static void countSort(int[] array, int exp) {
int[] tmpArr = new int[array.length];
int[] bucketArr = new int[10];

for (int i = 0; i < array.length; i++) {
bucketArr[(array[i] / exp) % 10]++;
}

for (int i = 1; i < 10; i++) {
bucketArr[i] += bucketArr[i - 1];
}

for (int i = array.length - 1; i >= 0; i--) {
tmpArr[bucketArr[(array[i] / exp) % 10] - 1] = array[i];
bucketArr[(array[i] / exp) % 10]--;
}

for (int i = 0; i < array.length; i++) {
array[i] = tmpArr[i];
}
}

private static int getMaxValue(int[] array) {
int max = array[0];
for (int i = 1; i < array.length; i++) {
if (array[i] > max) {
max = array[i];
}
}

return max;
}

17种编程语言实现排序算法-基数排序_算法_03

2. 安卓Kotlin版

开发工具:​​下载Android Studio​​

private fun sort(array: IntArray) {
val max = getMaxValue(array)
var exp = 1
while (max / exp > 0) {
countSort(array, exp)
exp *= 10
}
}

private fun countSort(array: IntArray, exp: Int) {
val tmpArr = IntArray(array.size)
val bucketArr = IntArray(10)
for (i in array.indices) bucketArr[array[i] / exp % 10]++
for (i in 1..9) bucketArr[i] += bucketArr[i - 1]
for (i in array.indices.reversed()) {
tmpArr[bucketArr[array[i] / exp % 10] - 1] = array[i]
bucketArr[array[i] / exp % 10]--
}
for (i in array.indices) {
array[i] = tmpArr[i]
}
}

private fun getMaxValue(array: IntArray): Int {
var max = array[0]
for (i in 1 until array.size) {
if (array[i] > max) {
max = array[i]
}
}
return max
}

17种编程语言实现排序算法-基数排序_git_04

3. NodeJS

开发工具:​​下载Visual Studio Code​​

function sort() {
let array = [2, 1, 5, 4, 3]
var max = getMaxValue(array)
for (var exp = 1; max / exp > 0; exp *= 10) {
countSort(array, exp)
}
}
function countSort(array, exp) {
var tmpArr = Array(array.length).fill(0)
var bucketArr = Array(10).fill(0)

for (var i = 0; i < array.length; i++) {
bucketArr[Math.floor(array[i] / exp) % 10]++
}

for (var i = 1; i < 10; i++) {
bucketArr[i] += bucketArr[i - 1]
}

for (var i = array.length - 1; i >= 0; i--) {
tmpArr[bucketArr[Math.floor(array[i] / exp) % 10] - 1] = array[i]
bucketArr[Math.floor(array[i] / exp) % 10]--
}

for (var i = 0; i < array.length; i++) {
array[i] = tmpArr[i]
}
}
function getMaxValue(array) {
var max = array[0]
for (var i = 1; i < array.length; i++) {
if (array[i] > max) {
max = array[i]
}
}

return max
}

17种编程语言实现排序算法-基数排序_排序算法_05

4. Php

开发工具:​​下载Visual Studio Code​​

public function sort()
{
$array = [2, 1, 5, 4, 3];
$max = max($array);
$max_digit = $this->get_digit($max);

for ($i = 1; $i <= $max_digit; $i++) {
$this->counting_sort($array, $i);
}
return var_dump($array);
}

public function counting_sort(&$array, $digit_num = false)
{
if ($digit_num !== false) {
for ($i = 0; $i < count($array); $i++) {
$array_temp[$i] = $this->get_specific_digit($array[$i], $digit_num);
}
} else {
$array_temp = $array;
}

$max = max($array);
$time_array = array();

for ($i = 0; $i <= $max; $i++) {
$time_array[$i] = 0;
}

for ($i = 0; $i < count($array_temp); $i++) {
$time_array[$array_temp[$i]]++;
}

for ($i = 0; $i < count($time_array) - 1; $i++) {
$time_array[$i + 1] += $time_array[$i];
}

for ($i = count($array) - 1; $i >= 0; $i--) {
$sorted_array[$time_array[$array_temp[$i]] - 1] = $array[$i];
$time_array[$array_temp[$i]]--;
}

$array = $sorted_array;
ksort($array);
}

public function get_digit($number)
{
$i = 1;
while ($number >= pow(10, $i)) {
$i++;
}

return $i;
}

public function get_specific_digit($num, $i)
{
if ($num < pow(10, $i - 1)) {
return 0;
}
return floor($num % pow(10, $i) / pow(10, $i - 1));
}

17种编程语言实现排序算法-基数排序_算法_06

5. Python

开发工具:​​下载PyCharm​​

array = [2, 1, 5, 4, 3]


def sort():
max_num = max(array)
it = 0
while 10 ** it <= max_num:
buckets = [[] for _ in range(10)]
for num in array:
digit = (num // 10 ** it) % 10
buckets[digit].append(num)
array.clear()
for buc in buckets:
array.extend(buc)

it += 1

17种编程语言实现排序算法-基数排序_Math_07

6. Swift(SwiftUI版)

开发工具:XCode(mac电脑自带)

var array = [2, 1, 5, 4, 3]

func sort() {
var bucket = createBucket()
let maxNum = getMaxValue(array: array)
let maxLength = getNumberLen(number: maxNum)

for digit in 1...maxLength {
for item in array {
let baseNumber = fetchBaseNumber(number: item, digit: digit)
bucket[baseNumber].append(item)
}

var index = 0
for i in 0..<bucket.count {
while !bucket[i].isEmpty {
array[index] = bucket[i].remove(at: 0)
index += 1
}
}
}
}

private func createBucket() -> Array<Array<Int>> {
var bucket: Array<Array<Int>> = []
for _ in 0..<10 {
bucket.append([])
}
return bucket
}

private func getMaxValue(array: Array<Int>) -> Int {
var maxNumber = array[0]
for item in array {
if maxNumber < item {
maxNumber = item
}
}
return maxNumber
}

func getNumberLen(number: Int) -> Int {
return "\(number)".count
}

func fetchBaseNumber(number: Int, digit: Int) -> Int{
if digit > 0 && digit <= getNumberLen(number: number) {
var numbersArray: Array<Int> = []
for char in "\(number)" {
numbersArray.append(Int("\(char)")!)
}
return numbersArray[numbersArray.count - digit]
}
return 0
}

17种编程语言实现排序算法-基数排序_算法_08

7. uni-app

开发工具:​​下载HBuilderX​​

sort() {
let array = [2, 1, 5, 4, 3]
var max = this.getMaxValue(array)
for (var exp = 1; max / exp > 0; exp *= 10) {
this.countSort(array, exp)
}
},
countSort(array: number[], exp: number) {
var tmpArr = Array(array.length).fill(0)
var bucketArr = Array(10).fill(0)

for (var i = 0; i < array.length; i++) {
bucketArr[Math.floor(array[i] / exp) % 10]++
}

for (var i = 1; i < 10; i++) {
bucketArr[i] += bucketArr[i - 1]
}

for (var i = array.length - 1; i >= 0; i--) {
tmpArr[bucketArr[Math.floor(array[i] / exp) % 10] - 1] = array[i]
bucketArr[Math.floor(array[i] / exp) % 10]--
}

for (var i = 0; i < array.length; i++) {
array[i] = tmpArr[i]
}
},
getMaxValue(array: number[]) {
var max = array[0]
for (var i = 1; i < array.length; i++) {
if (array[i] > max) {
max = array[i]
}
}

return max
},

17种编程语言实现排序算法-基数排序_排序算法_09

8. vue

开发工具:​​下载Visual Studio Code​​

sort() {
let array = [2, 1, 5, 4, 3]
var max = this.getMaxValue(array)
for (var exp = 1; max / exp > 0; exp *= 10) {
this.countSort(array, exp)
}
},
countSort(array: number[], exp: number) {
var tmpArr = Array(array.length).fill(0)
var bucketArr = Array(10).fill(0)

for (var i = 0; i < array.length; i++) {
bucketArr[Math.floor(array[i] / exp) % 10]++
}

for (var i = 1; i < 10; i++) {
bucketArr[i] += bucketArr[i - 1]
}

for (var i = array.length - 1; i >= 0; i--) {
tmpArr[bucketArr[Math.floor(array[i] / exp) % 10] - 1] = array[i]
bucketArr[Math.floor(array[i] / exp) % 10]--
}

for (var i = 0; i < array.length; i++) {
array[i] = tmpArr[i]
}
},
getMaxValue(array: number[]) {
var max = array[0]
for (var i = 1; i < array.length; i++) {
if (array[i] > max) {
max = array[i]
}
}

return max
},

17种编程语言实现排序算法-基数排序_排序算法_10

9. 微信小程序

开发工具:​​下载微信开发者工具​​

sort() {
let array = [2, 1, 5, 4, 3]
var max = this.getMaxValue(array)
for (var exp = 1; max / exp > 0; exp *= 10) {
this.countSort(array, exp)
}

this.setData({
array: array,
arrayStr: this.convertToStr(array),
})
},
countSort(array: number[], exp: number) {
var tmpArr = Array(array.length).fill(0)
var bucketArr = Array(10).fill(0)

for (var i = 0; i < array.length; i++) {
bucketArr[Math.floor(array[i] / exp) % 10]++
}

for (var i = 1; i < 10; i++) {
bucketArr[i] += bucketArr[i - 1]
}

for (var i = array.length - 1; i >= 0; i--) {
tmpArr[bucketArr[Math.floor(array[i] / exp) % 10] - 1] = array[i]
bucketArr[Math.floor(array[i] / exp) % 10]--
}

for (var i = 0; i < array.length; i++) {
array[i] = tmpArr[i]
}
},
getMaxValue(array: number[]) {
var max = array[0]
for (var i = 1; i < array.length; i++) {
if (array[i] > max) {
max = array[i]
}
}

return max
},

17种编程语言实现排序算法-基数排序_Math_11

10. 鸿蒙(ArkTS)

开发工具:​​下载DevEco Studio​

sort() {
let array = [2, 1, 5, 4, 3]
var max = this.getMaxValue(array)
for (var exp = 1; max / exp > 0; exp *= 10) {
this.countSort(array, exp)
}
}

countSort(array: number[], exp: number) {
var tmpArr = Array(array.length).fill(0)
var bucketArr = Array(10).fill(0)

for (var i = 0; i < array.length; i++) {
bucketArr[Math.floor(array[i] / exp) % 10]++
}

for (var i = 1; i < 10; i++) {
bucketArr[i] += bucketArr[i - 1]
}

for (var i = array.length - 1; i >= 0; i--) {
tmpArr[bucketArr[Math.floor(array[i] / exp) % 10] - 1] = array[i]
bucketArr[Math.floor(array[i] / exp) % 10]--
}

for (var i = 0; i < array.length; i++) {
array[i] = tmpArr[i]
}
}

getMaxValue(array: number[]) {
var max = array[0]
for (var i = 1; i < array.length; i++) {
if (array[i] > max) {
max = array[i]
}
}

return max
}

17种编程语言实现排序算法-基数排序_git_12

11. Go语言

开发工具:​​下载Visual Studio Code​​

var max_num_bucket int = 0

func radixSort(arr []int) {
var queue map[int][]int
var radix int = 0
var base int = 1
var key int
var keys []int
var index int
max := arr[0]
for _, val := range arr {
if val > max {
max = val
}
}
for max != 0 {
radix++
max /= 10
}

for i := 0; i < radix; i++ {
queue = make(map[int][]int)
keys = nil
index = 0
for _, val := range arr {
key = val % (base * 10) / base
queue[key] = append(queue[key], val)
}
if len(queue) > max_num_bucket {
max_num_bucket = len(queue)
}
for key := range queue {
keys = append(keys, key)
}
sort.Ints(keys)
for _, key := range keys {
for _, val := range queue[key] {
arr[index] = val
index++
}
}
base *= 10
}
}

17种编程语言实现排序算法-基数排序_Math_13

12. Java

开发工具:​​下载IntelliJ IDEA​​

private static void sort(int[] array) {
int max = getMaxValue(array);
for (int exp = 1; max / exp > 0; exp *= 10)
countSort(array, exp);
}

private static void countSort(int[] array, int exp) {
int[] tmpArr = new int[array.length];
int[] bucketArr = new int[10];

for (int i = 0; i < array.length; i++) {
bucketArr[(array[i] / exp) % 10]++;
}

for (int i = 1; i < 10; i++) {
bucketArr[i] += bucketArr[i - 1];
}

for (int i = array.length - 1; i >= 0; i--) {
tmpArr[bucketArr[(array[i] / exp) % 10] - 1] = array[i];
bucketArr[(array[i] / exp) % 10]--;
}

for (int i = 0; i < array.length; i++) {
array[i] = tmpArr[i];
}
}

private static int getMaxValue(int[] array) {
int max = array[0];
for (int i = 1; i < array.length; i++) {
if (array[i] > max) {
max = array[i];
}
}

return max;
}

17种编程语言实现排序算法-基数排序_i++_14

13. Kotlin

开发工具:​​下载IntelliJ IDEA​​

private fun sort(array: IntArray) {
val max = getMaxValue(array)
var exp = 1
while (max / exp > 0) {
countSort(array, exp)
exp *= 10
}
}

private fun countSort(array: IntArray, exp: Int) {
val tmpArr = IntArray(array.size)
val bucketArr = IntArray(10)
for (i in array.indices) bucketArr[array[i] / exp % 10]++
for (i in 1..9) bucketArr[i] += bucketArr[i - 1]
for (i in array.indices.reversed()) {
tmpArr[bucketArr[array[i] / exp % 10] - 1] = array[i]
bucketArr[array[i] / exp % 10]--
}
for (i in array.indices) {
array[i] = tmpArr[i]
}
}

private fun getMaxValue(array: IntArray): Int {
var max = array[0]
for (i in 1 until array.size) {
if (array[i] > max) {
max = array[i]
}
}
return max
}

17种编程语言实现排序算法-基数排序_Math_15

14. Flutter

开发工具:​​下载IntelliJ IDEA​​

17种编程语言实现排序算法-基数排序_i++_16

15. C语言

开发工具:​​下载Visual Studio​​

void sort(int *arr, int n)
{
int max = arr[0];
int base = 1;

for (int i = 0; i < n; i++)
{
if (arr[i] > max)
{
max = arr[i];
}
}
int *tmpArr = (int *)malloc(sizeof(int) * n);

while (max / base > 0)
{
int bucket[10] = {0};
for (int i = 0; i < n; i++)
{
bucket[arr[i] / base % 10]++;
}
for (int i = 1; i < 10; i++)
{
bucket[i] += bucket[i - 1];
}
for (int i = n - 1; i >= 0; i--)
{
tmpArr[bucket[arr[i] / base % 10] - 1] = arr[i];
bucket[arr[i] / base % 10]--;
}
for (int i = 0; i < n; i++)
{
arr[i] = tmpArr[i];
}
base *= 10;
}
free(tmpArr);
}

17种编程语言实现排序算法-基数排序_排序算法_17

16. C++

开发工具:​​下载Visual Studio​​

void sort(int *arr, int n)
{
int max = arr[0];
int base = 1;

for (int i = 0; i < n; i++)
{
if (arr[i] > max)
{
max = arr[i];
}
}
int *tmpArr = new int[n];
while (max / base > 0)
{
int bucket[10] = {0};
for (int i = 0; i < n; i++)
{
bucket[arr[i] / base % 10]++;
}
for (int i = 1; i < 10; i++)
{
bucket[i] += bucket[i - 1];
}
for (int i = n - 1; i >= 0; i--)
{
tmpArr[bucket[arr[i] / base % 10] - 1] = arr[i];
bucket[arr[i] / base % 10]--;
}
for (int i = 0; i < n; i++)
{
arr[i] = tmpArr[i];
}
base *= 10;
}
delete tmpArr;
}

17种编程语言实现排序算法-基数排序_i++_18

17. C#

开发工具:​​下载Visual Studio​​

public static void Sort(int[] array, int bucketNum = 10)
{
int maxLength = MaxLength(array);
int[,] bucket = new int[bucketNum, array.Length + 1];
for (int i = 0; i < maxLength; i++)
{
foreach (var num in array)
{
int bit = (int)(num / Math.Pow(10, i) % 10);
bucket[bit, ++bucket[bit, 0]] = num;
}
for (int count = 0, j = 0; j < bucketNum; j++)
{
for (int k = 1; k <= bucket[j, 0]; k++)
{
array[count++] = bucket[j, k];
}
}
for (int j = 0; j < bucketNum; j++)
{
bucket[j, 0] = 0;
}
}
}

private static int MaxLength(int[] array)
{
if (array.Length == 0) return 0;
int max = array[0];
for (int i = 1; i < array.Length; i++)
{
if (array[i] > max) max = array[i];
}
int count = 0;
while (max != 0)
{
max /= 10;
count++;
}
return count;
}

17种编程语言实现排序算法-基数排序_排序算法_19

关于

厦门大学计算机专业|华为八年高级工程师

包含:Java | 安卓 | 前端 | Flutter | iOS | 小程序 | 鸿蒙
公众号:蓝不蓝编程