万哥重写的代码没有任何问题。C语言的循环控制一共有三种:for、while、do while。虽然是三种但它们之间是可以互相等价替换使用的,效率方面没有差别,只是个人喜好习惯而已。事实上用if + goto也可以实现这三种循环方式,在汇编层面就是条件跳转。对于我来说,更喜欢for的结构,所以用for较多。
再来谈谈3楼baiqtd123456的代码。从代码上看咱俩的算法确实是一个,但你我的思路是两回事,在解决这个问题时我根本没想到过数轴,只是排序。只不过针对这种元素值域范围很小的集合进行排序时,采用统计排序要比广义排序效率更高,是O(n)量级的。
你代码中putsh_chip函数里的循环是多余的操作,n==i在循环中只能成立一次,一步num_chip[n]++;岂不更直接?
num_chip采用全局变量不是一个好的设计方案。这倒没什么,只要在你的可控范围内就行,但显然你对它的利弊并没有完全的认识。这么说是因为你只在它的声明中进行了一次初始化。这意味着你的_max函数只能运行一次,得到正确的结果。如果重复调用,要么你在调用函数中重新初始化num_chip数组,要么你将得到一个错误的结果。
大家喜欢看我的代码我就好,你们愿意多交流,我就愿意多写