• 5分钟了解计数排序


    前言

    计数排序是一种非比较性质的排序算法,计数排序借助辅助空间记录每个元素出现的次数,根据次数确定每一个元素最终的位置。

    计数排序思想介绍

    1根据待排序数组,获取最大值和最小值,得到所有元素的范围 [m,n]

    2新建一个长度为n-m+1的临时数组

    3遍历待排序数组,元素的值-m作为临时数组下标,该下标位置记录元素出现次数

    4遍历结束,临时数组就存储了每个元素出现的次数

    5根据该临时数组,最终得到排序后元素

    算法说明:

    待排序数据:12,4,6,7,4,6

    数据范围为[4,12],临时数组长度为12-4+1=9

    最终得到排序后序列:4,4,6,6,7,12

    计数排序的代码实现

    1. public static void sortCount(int[] arr) {

    2. int max = 0;

    3. int min = 0;

    4. // 获取数组的最大值和最小值

    5. for(int i = 0; i < arr.length; i++){

    6. max = Math.max(max, arr[i]);

    7. min = Math.min(min, arr[i]);

    8. }

    9. int len = arr.length;

    10. // 创建临时数组

    11. int[] temp = new int[max - min + 1];

    12. // 计数

    13. for(int i = 0; i < len; i++) {

    14. temp[arr[i] - min] += 1;

    15. }

    16. // 将临时数组中数据依次放回原数组

    17. for(int i = 0, index = 0; i < temp.length; i++) {

    18. int item = temp[i];

    19. while(item-- != 0) {

    20. arr[index++] = i + min;

    21. }

    22. }

    23. }

    总结

    计数排序需要占用额外的存储空间,它比较适用于数据比较集中的情况。

  • 相关阅读:
    一条命令深度清理你的mac
    将以太坊封装为 ERC20
    golang subprocess tests
    go 笔记
    readme
    如何使用 channel
    修改vscode caipeiyu.writeCnblog ,简化博客发布
    thedao
    firefox 59 无法使用 pac 代理上网
    scrapy简单使用
  • 原文地址:https://www.cnblogs.com/qfchen/p/11284157.html
Copyright © 2020-2023  润新知