计数排序:对数组的最小值,最大值和频率进行计数

时间:2019-05-09 09:34:24

标签: c# sorting

我想修改计数排序,以有效满足最小值不为0的一系列值。 我的代码问题是,如果最小值不为0,则应查找最小值,例如,如果列表的范围为100 000-110 000,最小值为100 000,则应查找最小值。但是频率(计数计数数组的)不能为100001 我的代码目前无法正常工作或无法排序,无法列出20000个整数,且数字范围为1000-9999。

当min为0时有效,但这不是有效实现计数排序的方式...

{'FOO': 'BAR', 'BUZ': 'BLEH', 'MULTILINE1': 'This\nis a test', 'MULTILINE2': 'This\nis a test'}

列表未排序,并且将计数数组中的元素显示为10000。

1 个答案:

答案 0 :(得分:0)

这是我注意到的事情:

  1. 最小值查找功能从数组中获取第一个值,而不是实际的最小值。您可能要使用List.Min();

  2. countArray声明中,应使用最大值和最小值+ 1之差作为大小。

  3. 在访问具有countArray的最小值时,您需要偏移索引,因为0索引元素应对应于最小值而不是0。

  4. for (int i = 0; i <= max; i++)中的countArray上进行迭代时,不应在条件中使用最大值。除非最小值为0,否则它将与数组大小不同。

  5. 在计数显示功能中,您可以简单地使用Array.Length,而无需遍历数组。

我不会为您提供算法本身的代码,因为它显然是Uni / College / HS分配。