【有趣的面试算法题】之六 把正数集中的数排列成一个最小的数,最高位升序排列就好

          在《剑指offer 名企面试官精讲典型编程题》中的面试题33:把数组排成最小的数, 并假定数值都为正。 作者提出一个复杂度为O(n*logn)的基于排序思路的方案,并对此给出了详细的代码及论证。


        但是,我发现还可以进一步进行优化!   就是其比较函数中的具体实现中并不需要将两个数拼装之后再比较,而是直接比较两个数,可以省去大量的数据移动! 只是这时,需要自己写一个函数代替函数strcmp()。


        新写的函数比较思路是:排在前面的数字应当小才是,于是总是比较两个数的较高位数字。 

       具体实施流程可以这样:

1,先比较两个数的最高位。如果两个数字不相同,直接返回结果;如果相同,则比较次高位。

2,如果两个数据长度不一,则较短的后续一直使用个位数字与较长的后续位进行比较。



附上原作者的文章截图:


【有趣的面试算法题】之六 把正数集中的数排列成一个最小的数,最高位升序排列就好_第1张图片







你可能感兴趣的:(算法,面试题)