计数排序算法(JAVA实现)

算法思想

适用范围:量大但是范围小

时间复杂度

计数排序平均时间复杂度:o(n+k)(平方)、空间复杂度:o(k)、稳定排序、外部排序

算法描述

计数排序,不是基于元素比较,而是利用数组下标确定元素的正确位置。

排序演示

待排序列:9 3 5 4 9 1 2 7 8 1 3 6 5 3 4 0 10 9 7 9

先遍历这个无序的数列,让每一个整数按照值对号入座,对应数组下标的元素加1。

统计结果如下:

数组值:|1 2 1 3 2 2 1 2 1 4 1|

下表值:|0 1 2 3 4 5 6 7 8 9 10|

直接便利数组,输出数组元素的下标值,元素的值是几就输出多少次。

输出结果为: 0 1 1 2 3 3 3 4 4 5 5 6 7 7 8 9 9 9 10

详细过程请看下方链接 : 1.8 计数排序 | 菜鸟教程

代码

package Sort;

import java.util.Arrays;

public class 计数排序 {
	public static void main(String[] args) {
		int[] arr = {2,4,2,3,7,1,5,6,8,9,2,9,8,6,0};
		int[] result = sort(arr);
		System.out.println(Arrays.toString(result));
	}
	
	static int[] sort(int[] arr) {
		int[] result = new int[arr.length]; //创建一个数组用来存储arr中的数
		int[] count = new int[10]; //创建一个计数数组,
		for (int i = 0; i < arr.length; i++) {
			count[arr[i]]++;
		}
		//打印count 输出从0-9每个数出现的次数
		System.out.println(Arrays.toString(count)); 

		//累加数组 统计数组做变形,后面的元素等于前面元素的和
		for (int i = 1; i < count.length; i++) {
			count[i] = count[i] + count[i-1];
		}
		
		System.out.println(Arrays.toString(count));
		
		//倒序遍历原始数组,从统计数组中找到正确位置
		for (int i = arr.length-1; i >= 0; i--) {
			result[--count[arr[i]]] = arr[i];
		}
		
		return result;
	}
	
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值