标签:整数 代码实现 return 要求 stat col 位置 count 描述
计数排序的核心在于将输入的数据值转化为键存储在额外开辟的数组空间中。 作为一种线性时间复杂度的排序,计数排序要求输入的数据必须是有确定范围的整数。
计数排序(Counting sort)是一种稳定的排序算法。计数排序使用一个额外的数组C,其中第i个元素是待排序数组A中值等于i的元素的个数。然后根据数组C来将A中的元素排到正确的位置。它只能对整数进行排序。
public static int[] countingSort(int[] a){ int min = a[0]; int max = a[0]; for (int i=0; i<a.length; i++){ if (a[i] < min){ min = a[i]; } if (a[i] > max){ max = a[i]; } } int[] b = new int[max - min +1]; int bias = min; for (int i = 0; i<a.length; i++){ b[a[i]-bias]++; } for (int i = 0, index=0; i < b.length; i++){ while(b[i] !=0){ a[index] = i+bias; b[i]--; index ++; } } return a; }
当输入的元素是n 个0到k之间的整数时,它的运行时间是 O(n + k)。计数排序不是比较排序,排序的速度快于任何比较排序算法。由于用来计数的数组C的长度取决于待排序数组中数据的范围(等于待排序数组的最大值与最小值的差加上1),这使得计数排序对于数据范围很大的数组,需要大量时间和内存。
最佳情况:T(n) = O(n+k) 最差情况:T(n) = O(n+k) 平均情况:T(n) = O(n+k)
标签:整数 代码实现 return 要求 stat col 位置 count 描述
原文地址:https://www.cnblogs.com/tingtwang/p/9760822.html