有趣的理论.
>>可以先建立一个连表数组, 然后扫描数据
>>依次插入链表, 这样得代价是n
^^^^^^^^
请问如何个依次法? 不也是排序吗? 代价是n吗? 动动脑子吧.
^^^^
将原始数据搬到链表中的开销是n, 但要搬到链表中正确的位置呢?
不另外得n次扫描链表吗(每搬一个扫描一次)? 这个开销是多少?
实在搞不动为什么您老是说什么拖拉机?
问题是什么看清了吗?
就拿你举的例子来说吧:
>> 从A 到 K 先排序? 不太可能吧?
>> 你是不是不用关心大小, 只把相同的发到一堆?
不是废话吗? 发到一堆才能解决zlq的问题-->找到相同的元素嘛, 因为排
序后相同的都在一起.
>> 举个例子
>> 12 8 23 9 8 34 12 8 12
>> 用上面的方法,结果是
>> 12 12 12
>> 8 8 8
>> 23
>> 9
>> 34
这是你的方法得到的结果吧? 如果要找34, 只有顺序搜索到最后一个时才
能找到, 没有任何的优化方法, 假设数据量极大的话, 您的方法效率何在?
如果用我的方法, 排序后(我的排序也相当与您的将原始数据搬到链表中的
步骤, 而且我可以用经典的快速排序法, 速度比你的顺序搬动--相当于冒泡
排序法--效率高几倍)得到的结果是:
888
9
12 12 12
23
34
然后我可以用经典的二分法查找, 效率又是您顺序查找的几倍, 而且数据量
越大, 效率也越高.
>> 最后一点, 无论何时, 排序都是一种费时费力的事情.
>>除非是没有别的方法, 或数据访问十分频繁.
最后说一点, 无论何时, 顺序查找都是一种最费时的事情, 当然最简单,
不用动脑子.
但您不能因为它最简单, 就否定其他方法的效率比这个高.
排序的确是一种费时费力的事, 但费的这点时在以后查找中可以几倍节约
下来.
费的这点力可以提高您的编程水平.