交换版的选择排序与字典序的冲突以及一系列经验积累

寻找前k个满足条件的数据。不需要完全排序,只需要找到前k个。
但是按照字典序排列好之后,如果此时使用交换版的选择排序,则可能破坏字典序。这个错误还算是挺隐蔽的。进而造成答案错误。
这个时候,最好使用额外空间按照顺序记录下前k个数据。并且用标记位表示是否已经记录。

另外,尽可能手动初始化字符串变量,或者在结尾加上‘\0’,否则使用strcmp函数时,字符串可能由于其初始值的不同造成strlen的不同,进而对于strcmp的结果产生影响。

突然意识到交换函数的精度问题,不过好在swap函数不需要担心。这样的话,想起来了唐计考试时候的一道题目,不适用中间变量,交换两个变量的值。在计算机的角度,实际上使用加减法可能造成精度缺失。

a = a + b; b = a - b; a = a - b;

a = a * b; b = a / b; a = a / b;

但是上述问题换一个角度,考虑溢出的问题。我们本能认为,加减法可能溢出,而乘除法只会溢出的更加厉害。但是即使溢出,由于后续有逆过程减法,最终结果是不变的。即虽然发生了溢出,但是却没有影响最终的结果。

猜你喜欢

转载自blog.csdn.net/weixin_47741017/article/details/114963366