当前位置:首页 > 科技  > 软件

计数排序(Counting Sort)详解

来源: 责编: 时间:2023-10-06 19:19:42 194观看
导读计数排序(Counting Sort)是一种非比较排序算法,其核心思想是通过计数每个元素的出现次数来进行排序,适用于整数或有限范围内的非负整数排序。这个算法的特点是速度快且稳定,适用于某些特定场景。在本文中,我们将深入探讨计

计数排序(Counting Sort)是一种非比较排序算法,其核心思想是通过计数每个元素的出现次数来进行排序,适用于整数或有限范围内的非负整数排序。这个算法的特点是速度快且稳定,适用于某些特定场景。在本文中,我们将深入探讨计数排序的原理、步骤以及性能分析。hkv28资讯网——每日最新资讯28at.com

算法原理

计数排序的基本思想是:hkv28资讯网——每日最新资讯28at.com

  1. 计数:遍历待排序的数组,统计每个元素出现的次数,并将统计结果存储在一个计数数组中。计数数组的索引对应着元素的值,而计数数组中的值表示该元素出现的次数。
  2. 累积计数:对计数数组进行累积计数,即将每个元素的计数值加上前一个元素的计数值,得到每个元素在排序后数组中的位置。这一步确保相同元素的相对顺序不变。
  3. 排序:创建一个与待排序数组大小相同的结果数组,然后遍历待排序数组,根据元素的值在累积计数数组中找到其在结果数组中的位置,将元素放置在结果数组中的正确位置。

算法步骤

计数排序的具体步骤如下:hkv28资讯网——每日最新资讯28at.com

  1. 扫描待排序数组,确定数组的最大值(max)和最小值(min)。
  2. 创建一个计数数组(count),长度为max - min + 1。
  3. 第一次遍历待排序数组,统计每个元素出现的次数,将结果存储在计数数组中。
  4. 对计数数组进行累积计数,确保计数数组中的每个元素表示小于等于该元素值的元素个数。
  5. 创建一个与待排序数组大小相同的结果数组(result)。
  6. 第二次遍历待排序数组,根据元素的值在累积计数数组中找到其在结果数组中的位置,将元素放置在结果数组中的正确位置。
  7. 将结果数组复制回原始数组,完成排序。

Java 实现

以下是使用Java语言实现计数排序算法的示例代码:hkv28资讯网——每日最新资讯28at.com

public class Test {    public static void main(String[] args) {        int[] arr = new int[]{5,2,3,1,6,7,1,3};        countingSort(arr);    }    public static void countingSort(int[] arr){        System.out.println("原始数组:"+ Arrays.toString(arr));        //获取排序数组的长度        int len=  arr.length;        //获取数组最大元素        int max = Arrays.stream(arr).max().getAsInt();        //获取数组最小元素        int min = Arrays.stream(arr).min().getAsInt();        //计算计数数组的长度        int rang = max-min+1;        //创建计数数组        int count[] = new int[rang];        //创建排序后的目标数组        int result[] = new int[len];        //计数:统计每个元素出现的次数        for(int i = 0; i < len; i++){            count[arr[i]-min]++;        }        System.out.println("计数数组:"+ Arrays.toString(count));        //累计计数:计算每个元素在排序后数组中的位置        for(int j = 1 ;j < rang; j++){            count[j]+=count[j-1];        }        System.out.println("累计计数数组:"+ Arrays.toString(count));        //排序:根据累计计数数组将元素放置到正确的位置        for(int k = len -1 ; k >= 0; k--){            result[count[arr[k] - min] -1] = arr[k];            count[arr[k] - min]--;        }        System.arraycopy(result, 0, arr, 0, len);        System.out.println("排序完成的数组:"+ Arrays.toString(arr));    }}

运行结果为:hkv28资讯网——每日最新资讯28at.com

原始数组:[5, 2, 3, 1, 6, 7, 1, 3]计数数组:[2, 1, 2, 0, 1, 1, 1]累计计数数组:[2, 3, 5, 5, 6, 7, 8]排序完成的数组:[1, 1, 2, 3, 3, 5, 6, 7]

这段代码演示了如何使用计数排序算法对整数数组进行排序。计数排序是一种稳定的排序算法,适用于整数范围不大的情况,它的时间复杂度为O(n + k),其中n是待排序数组的大小,k是整数范围(数组中最大元素与最小元素的差值)。hkv28资讯网——每日最新资讯28at.com

性能分析

计数排序的性能分析如下:hkv28资讯网——每日最新资讯28at.com

  • 平均时间复杂度:O(n + k),其中n是待排序数组的大小,k是整数范围。
  • 最坏时间复杂度:O(n + k)。
  • 最佳时间复杂度:O(n + k)。
  • 空间复杂度:O(n + k),需要额外的计数数组和结果数组。
  • 稳定性:计数排序是一种稳定的排序算法,不改变相同元素的相对顺序。

使用场景

计数排序适用于以下情况:hkv28资讯网——每日最新资讯28at.com

  • 需要排序的数据是整数或有限范围内的非负整数。
  • 待排序数据中存在大量重复元素。
  • 对稳定性排序有要求,即相同元素的相对顺序不变。

总结

计数排序是一种高效的非比较排序算法,适用于整数排序和稳定性排序的场景。尽管它对整数范围有一定要求,但在合适的情况下,计数排序能够提供线性时间复杂度的排序性能,相对于其他复杂排序算法来说,它具有独特的优势。因此,在选择排序算法时,应根据数据特点和性能需求来决定是否使用计数排序。hkv28资讯网——每日最新资讯28at.com

本文链接://www.dmpip.com//www.dmpip.com/showinfo-26-12136-0.html计数排序(Counting Sort)详解

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 池化技术:如何减少频繁创建数据库连接的性能损耗?

下一篇: GO 比较两个对象是否相同

标签:
  • 热门焦点
  • Find N3入网:最高支持16+1TB

    Find N3入网:最高支持16+1TB

    OPPO将于近期登场的Find N3折叠屏目前已经正式入网,型号为PHN110。本次Find N3在外观方面相比前两代有很大的变化,不再是小号的横向折叠屏,而是跟别的厂商一样采用了较为常见的
  • 三言两语说透设计模式的艺术-简单工厂模式

    三言两语说透设计模式的艺术-简单工厂模式

    一、写在前面工厂模式是最常见的一种创建型设计模式,通常说的工厂模式指的是工厂方法模式,是使用频率最高的工厂模式。简单工厂模式又称为静态工厂方法模式,不属于GoF 23种设计
  • SpringBoot中使用Cache提升接口性能详解

    SpringBoot中使用Cache提升接口性能详解

    环境:springboot2.3.12.RELEASE + JSR107 + Ehcache + JPASpring 框架从 3.1 开始,对 Spring 应用程序提供了透明式添加缓存的支持。和事务支持一样,抽象缓存允许一致地使用各
  • 多线程开发带来的问题与解决方法

    多线程开发带来的问题与解决方法

    使用多线程主要会带来以下几个问题:(一)线程安全问题  线程安全问题指的是在某一线程从开始访问到结束访问某一数据期间,该数据被其他的线程所修改,那么对于当前线程而言,该线程
  • 破圈是B站头上的紧箍咒

    破圈是B站头上的紧箍咒

    来源 | 光子星球撰文 | 吴坤谚编辑 | 吴先之每年的暑期档都少不了瞄准追剧女孩们的古偶剧集,2021年有优酷的《山河令》,2022年有爱奇艺的《苍兰诀》,今年却轮到小破站抓住了追
  • 2天涨粉255万,又一赛道在抖音爆火

    2天涨粉255万,又一赛道在抖音爆火

    来源:运营研究社作者 | 张知白编辑 | 杨佩汶设计 | 晏谈梦洁这个暑期,旅游赛道彻底火了:有的「地方」火了&mdash;&mdash;贵州村超旅游收入 1 个月超过 12 亿;有的「博主」火了&m
  • 苹果、三星、惠普等暂停向印度出口笔记本和平板电脑

    苹果、三星、惠普等暂停向印度出口笔记本和平板电脑

    集微网消息,据彭博社报道,在8月3日印度突然禁止在没有许可证的情况下向印度进口电脑/平板及显示器等产品后,苹果、三星电子和惠普等大公司暂停向印度
  • 三星Galaxy Z Fold5今日亮相:厚度缩减但仍略显厚重

    三星Galaxy Z Fold5今日亮相:厚度缩减但仍略显厚重

    据官方此前宣布,三星将于7月26日也就是今天在韩国首尔举办Unpacked活动,届时将带来带来包括Galaxy Buds 3、Galaxy Watch 6、Galaxy Tab S9、Galaxy
  • DRAM存储器10月价格下跌,NAND闪存本月价格与上月持平

    DRAM存储器10月价格下跌,NAND闪存本月价格与上月持平

    10月30日,据韩国媒体消息,自今年年初以来一直在上涨的 DRAM 存储器的交易价格仅在本月就下跌了近 10%,此次是全年首次降价,而NAND 闪存本月价格与上月持平。市
Top
Baidu
map