iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Java排序算法之计数排序如何实现
  • 681
分享到

Java排序算法之计数排序如何实现

2023-06-21 20:06:42 681人浏览 薄情痞子
摘要

这篇文章主要为大家展示了“Java排序算法之计数排序如何实现”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Java排序算法之计数排序如何实现”这篇文章吧。计数排序是非比较的排序算法,用辅助数组对

这篇文章主要为大家展示了“Java排序算法之计数排序如何实现”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Java排序算法之计数排序如何实现”这篇文章吧。

计数排序是非比较的排序算法,用辅助数组对数组中出现的数字计数,元素转下标,下标转元素

计数排序优缺点

优点:快

缺点:数据范围很大,比较稀疏,会导致辅助空间很大,造成空间的浪费

使用范围:数据较为密集或范围较小时适用。

思路

找出最大元素max

Java排序算法之计数排序如何实现

初始化一个max+1的数组

Java排序算法之计数排序如何实现

将每个元素的计数存储在数组中各自的索引

Java排序算法之计数排序如何实现

存储计数数组元素的累积和

Java排序算法之计数排序如何实现

数组中找到原始数组的每个元素的索引

Java排序算法之计数排序如何实现

计数排序代码实现

public class CountingSort {    private static int[] countingSort(int[] arr) {        //1、求取最大值和最小值,计算中间数组的长度:中间数组是用来记录原始数据中每个值出现的频率        int min = arr[0], max = arr[0];        for (int i : arr) {            if (i > max) {                max = i;            }            if (i < min) {                min = i;            }        }         //2、有了最大值和最小值能够确定中间数组的长度        //例如存储 5-0+1=6        int[] countArray = new int[max - min + 1];         //3、循环遍历旧数组计数排序: 就是统计原始数组值出现的频率到中间数组B中        for (int i : arr) {            countArray[i - min] += 1; //数的位置上+1        }         //4、统计数组做变形,后边的元素等于前面的元素之和        for (int i = 1; i < countArray.length; i++) {            countArray[i] += countArray[i - 1];        }         //5、倒序遍历原始数组,从统计数组中找到正确的位置,输出到结果数组        int[] resultArray = new int[arr.length];        for (int i = arr.length - 1; i >= 0; i--) {            //给resultArray的当前位置赋值            resultArray[countArray[arr[i] - min] - 1] = arr[i];            //给countArray的位置的值--            countArray[arr[i] - min]--;        }        return resultArray;    }     public static void main(String[] args) {        int[] arr = {1,28,3,21,11,7,6,18};        int[] sortedArr = countingSort(arr);        System.out.println(Arrays.toString(sortedArr));    }}

时间复杂度:O(n+k)

以上是“Java排序算法之计数排序如何实现”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网精选频道!

--结束END--

本文标题: Java排序算法之计数排序如何实现

本文链接: https://www.lsjlt.com/news/300401.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • c++中函数返回值的类型是由什么决定的
    在 c++ 中,函数返回值类型由其函数原型的类型决定,包括:函数原型指定返回值类型:在函数名称后跟冒号,再跟返回值类型。默认返回值类型为 int:如果不指定返回值类型,默认类型为 int...
    99+
    2024-05-14
    c++
  • 在c++中,什么叫函数的返回值
    在 c++ 中,函数只能返回一个值。解决方法:引用传递、结构体或类、out 参数。没有返回值的函数可以使用 void 类型,表示不返回任何值。 什么是 C++ 中函数的返回值? 在 C...
    99+
    2024-05-14
    c++
  • c++中static的作用和用法
    c++ 中的 static 关键字用于声明静态变量、函数或类成员,使其在程序生命周期内存在或与类的每个实例关联。具体用法如下:静态变量:在函数外声明,仅创建一份副本,在程序启动时初始化且...
    99+
    2024-05-14
    c++
  • static在c和c++中的区别
    static关键字在c和c++中用于控制变量的生命周期和作用域。在c中,它延长局部变量和限制全局变量的作用域。在c++中,它还用于定义类成员变量和函数、命名空间中的变量和函数,以及函数内...
    99+
    2024-05-14
    c语言 c++ 作用域
  • c++中a++与++a的区别
    c++ 中 a++ 和 ++a 区别:后缀递增 a++ 先返回原始值,再递增;前缀递增 ++a 先递增,再返回递增后的值。 C++ 中 a++ 与 ++a 的区别 在 C++ 中,a+...
    99+
    2024-05-14
    c++
  • if else在c++中的用法
    在 c++ 中,if else 语句根据条件执行不同代码块的语法为:if (condition) { } else { }。它可用于:检查数字是否为正数根据条件执行嵌套 if els...
    99+
    2024-05-14
    c++
  • struct在c和c++中的区别
    c和c++中struct的区别包括:c中成员默认公开访问,c++中默认私有访问。c++可以在struct定义中初始化成员,c中不允许。c++支持成员函数,c不支持。c++不支持匿名str...
    99+
    2024-05-14
    c++
  • c++中的所有函数都是传值调用吗
    函数调用类型可分为传值调用和引用调用,默认采用传值调用,传值调用中形参接收实参副本,引用调用中形参接收实参引用,对形参进行的修改也会影响实参。 C++中的函数调用类型 C++中,函数调...
    99+
    2024-05-14
    c++
  • c++中ifdef的用法
    c++ 中的 #ifdef 预处理器指令用于根据预定义宏是否存在来编译或不编译代码块。它的语法是 #ifdef ,其作用包括:检查宏是否存在,如果宏已定义,则编译其后的代码块;实现条件编...
    99+
    2024-05-14
    c++
  • c++中的函数调用有哪几种方式?它们有什么区别
    c++ 中的函数调用方式有 4 种:值传递(复制实参值,不影响实参)、引用传递(传递实参地址,修改形参值会修改实参)、指针传递(传递实参指向的内存地址,修改指向的值会影响实参)、rval...
    99+
    2024-05-14
    c++
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作