1、概念
计数排序的核心在于将输入的数据值转化为键存储在额外开辟的数组空间中。 作为一种线性时间复杂度的排序,计数排序要求输入的数据必须是有确定范围的整数。
计数排序(Counting sort)是一种稳定的排序算法。计数排序使用一个额外的数组C,其中第i个元素是待排序数组A中值等于i的元素的个数。然后根据数组C来将A中的元素排到正确的位置。它只能对整数进行排序。
2、基本思想
- 找出待排序的数组中最大和最小的元素;
- 统计数组中每个值为i的元素出现的次数,存入数组C的第i项;
- 对所有的计数累加(从C中的第一个元素开始,每一项和前一项相加);
- 反向填充目标数组:将每个元素i放在新数组的第C(i)项,每放一个元素就将C(i)减去1。
3、代码实现
public void countingsort(int[] array, int[] b, int k)
{
//创建数组c
int[] c = new int[k+1];
for(int i=0;i<c.length;i++)
{
c[i] = 0;
}
//统计数组array中每个元素出现的次数
for(int i=0;i<array.length;i++)
{
c[array[i]]++;
}
/**
* 统计数组中小于等于某一个数的的个数
* 因为小于等于0的数的个数就是等于0的个数,所以迭代从1开始
*/
for(int i=1;i<c.length;i++)
{
c[i] =c[i] + c[i-1];
}
for(int i=0;i<array.length;i++)
{
/**
*
*/
b[c[array[i]] - 1] = array[i];
/**
*
*/
c[array[i]]--;
}
}
public static void main(String[] args) {
int[] array =new int[]{3,44,38,5,47,15,36,26,27,2,46,4,19,50,48};
int[] b = new int[10];
new Counting().countingsort(array,b,50);//其中55为数组中最大的元素值
for(int i=0;i<b.length;i++)
{
System.out.print(b[i]+" ");
}
}
本文暂时没有评论,来添加一个吧(●'◡'●)