public class CountingSort {
/**
* 计数排序.
* @param array 待排序数组
* @param k 数组元素范围为0-k
* @return 已排序数组
*/
public static int[] sort(int[] array, int k) {
int[] counts = new int[k+1];
// 统计元素出现的次数
for (int i = 0; i < array.length; i++) {
counts[array[i]]++;
}
// 合计,每个元素是前面所有元素的和
for (int i = 1; i < counts.length; i++) {
counts[i] += counts[i - 1];
}
int[] result = new int[array.length];
// 复制,array[i]在目标数组中的位置是counts[array[i]
for (int i = array.length - 1; i >= 0; i--) {
result[counts[array[i]]-1] = array[i];
counts[array[i]]--;
}
return result;
}
}
import junit.framework.TestCase;
public class CountingSortTest extends TestCase {
public void testFixArray() {
int[] array = { 0, 2, 4, 3, 1, 3 };
array = CountingSort.sort(array, 4);
assertTrue(verifyOrdered(array));
}
public void testRandomArray() {
int size = (int)(Math.random()* 1000);
int[] array = new int[size];
for(int i = 0; i < size; i++) {
array[i] = (int)(Math.random()* 100);
}
array = CountingSort.sort(array, 100);
assertTrue(verifyOrdered(array));
}
private boolean verifyOrdered(int[] array) {
for (int i = 1; i < array.length; i++) {
if (array[i - 1] > array[i]) {
return false;
}
}
return true;
}
}
算法导论示例-CountingSort
计数排序算法实现
最新推荐文章于 2024-09-12 16:28:29 发布
本文介绍了一种简单直观的排序算法——计数排序,并提供了完整的Java实现代码。该算法适用于整数排序,尤其是当数值范围有限时效果更佳。文中还包含单元测试用例验证排序结果的正确性。
905

被折叠的 条评论
为什么被折叠?



