计数排序(java实现)

计数排序常用于纯数字的排序,速度很快,也很实用
小数据采用计数排序,空间换时间

package sort;
//计数排序 常用于数字排序 用空间换时间策略
public class CountIntegerSort {
	/*
	 * 2 4 6 8 8 6
	 * 1 0 1 0 2 0 2
	 * 0 1 2 3 4 5 6 
	 */
	public static void sort(int[] arr) {
		if(arr==null||arr.length==1) {
			return;
		}
       int min=findmin(arr);
       int max=findmax(arr);
       int[] count=new int[max-min+1];//创建空数组用来统计数字的次数。
       for(int i=0;i<arr.length;i++) {
    	   count[arr[i]-min]++;//将原值对应的次数存到新数组中
       }
       int index=0;
       for(int i=0;i<count.length;) {//根据次数重新给arr赋值,也就是排序。
    	   if(count[i]!=0) {
    		   arr[index++]=i+min;
    		   count[i]--;
    		   continue;
    	   }else {
    		   i++;
    	   }
       }
	}

	private static int findmax(int[] arr) {
		int max=arr[0];
		// TODO Auto-generated method stub
		for(int i=0;i<arr.length;i++) {
			if(arr[i]>max) {
				max=arr[i];
			}
		}
		return max;
	}

	private static int findmin(int[] arr) {
		int min=arr[0];
		// TODO Auto-generated method stub
		for(int i=0;i<arr.length;i++) {
			if(arr[i]<min) {
				min=arr[i];
			}
		}
		return min;
	}
}
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值