access两字段同时升序排序_排序算法(六):Counting Sort 计数排序

本文介绍了计数排序的基本思想和稳定性的实现,通过Java代码展示了算法过程。该排序方法适用于整数,但当数值范围过大时会消耗大量空间。
摘要由CSDN通过智能技术生成
之前文章介绍的一些排序算法都是基于比较来进行排序的,故它们在平均情况下的时间复杂度最好也不过是线性对数级别。这里我们来介绍一种简单的基于非比较的排序算法——Counting Sort 计数排序,其时间复杂度可以达到线性级别

53fdfeb548229497c5c6e87207dc185d.png

基本思想

Counting Sort 计数排序,顾名思义,就是统计待排序数组元素的出现次数。其基本思想比较简单:

  1. 根据待排序元素的数值范围大小k(max-min+1),建立一个k大小的频数统计数组counts。对于counts数组而言,其索引范围 0 ~ k-1,正好可以对应到待排序元素的取值范围min~max上

  2. 统计待排序元素element的次数,并其存储到counts数组中,即counts[ elemet-min ] = countValue

  3. 待计数统计完成后遍历counts数组,根据次数值来输出原待排序元素值,此时即完成排序

    这里给出计数排序在Java下的实现:

/**

* 计数排序

*/

public class CountingSort {

/**

* 升序排列 (非稳定)

*/

public static void sort1() {

// 获取测试用例

int[] array = getTestCase();

int size = array.length;

System.out.println("before sort: " + Arrays.toString(array) );

// 求取最值

int[] minMax = getMinMax(array);

int min = minMax[0];

int max = minMax[1];

// 根据数据范围创建统计数组

int k = max-min+1;<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值