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

开源地址

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++)、鸿蒙

image

image

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;
    }
image

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
}

image

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
}

image

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));
    }
image

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

image

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
}
image

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
},
image

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
    },
image

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
  },
image

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
  }
image

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
    }
}
image

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;
    }
image

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
}

image

14. Flutter

开发工具:下载IntelliJ IDEA


image

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);
}

image

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;
}

image

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;
        }
image

关于

厦门大学计算机专业|华为八年高级工程师
专注《零基础学编程系列》 http://lblbc.cn/blog
包含:Java | 安卓 | 前端 | Flutter | iOS | 小程序 | 鸿蒙
公众号:蓝不蓝编程

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,122评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,070评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,491评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,636评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,676评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,541评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,292评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,211评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,655评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,846评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,965评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,684评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,295评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,894评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,012评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,126评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,914评论 2 355

推荐阅读更多精彩内容