呵呵!qee用兄的代码加上判断max和min的步骤后和我的代码就是基本一致的了,看得出老兄对代码的控制也是有相当功底的哦。
数组可以用负数作下标我也是最近才发现的,这也就是我在题目中让数值出现负数的原因,本意是想考考大家的:)这种方法还可以用来数据排序,适用于所有最值不是很大的整型数据,而且速度很快,称为计数排序法。
对于本题来说直接dim(-500 to +500)的做法是不允许的,至少是不推荐。例如如果我直接贴出数值,然后说明数据范围在-1000000到+1000000之间或更大呢(实际范围却比这个小很多)?那么直接声明这么大的一个数组是会很慢的,赋值过程也会慢不少,甚至物理内存都有可能分配不出这么大的空间来。因此我认为在代码中判断max和min的步骤是必需的。
另外有一点不知道qee用兄和山菊花兄有没有注意到,其实山菊花兄的代码比我的代码慢一些的原因并不主要在于没有声明负数的下标,而是在于这一句:counts(arr(i,j))=counts(arr(i,j))+1 (couns为计数数组)。 既然已经用n记录了arr(i,j)用于判断与后一个不重复,那么这一句就应该改为counts(n)=counts(n)+1速度能够提高。因为在一个大数组中寻找对应下标返回值会比直接使用变量慢,声明一个数组物理内存会马上划分出相应的空间用于存放数组信息,当要返回数组中的某个元素时系统都会进行一次寻址操作,数组越大寻址时间就会越长。所以当你在代码中要多次引用同一个数组元素时,不如先用一个普通变量将这个数组的值提取出来n=arr(i,j),以避免重复寻址。这一点在qee用兄的代码中已经改进过来了,很是难得。
这个我看着差不多都可以当我的总结贴了,因为再多的我也讲不出来了,呵呵!不对的地方还请大家指教。 |