快速查找算法(100分)

  • 主题发起人 主题发起人 龙之吻
  • 开始时间 开始时间

龙之吻

Unregistered / Unconfirmed
GUEST, unregistred user!
在memo里有这样的文件
1
2
3
6
5
2
3
。。。
(一万条左右)
查找出其中相同的。
用二重循环一个一个的找不现实,速度狂慢。
请教高手们用什么方法最快,最好帮忙写一下。
另外用memo做容器会不会影响速度?
 
都是一位的数值吗?如果是那也太容易了。
 
http://www.delphibbs.com/delphibbs/dispq.asp?lid=283208
世界上最快的替换函数(2000/7/14最新版本)

替换的前提也就是先找到才替换吧,看看呗
 
TStringList本身有个Sort函数,使用的快速排序法
你就使用那个吧
aLst:=TStringList.Create;
aLst.Assign(Memo.Lines);
aLst.Sort;
这样子,就排好了,呵呵
 
TStringList有点慢,可定义一个数组用来存放数据,使用快速排序法对其进行排序,别说1万,几十万也可在几秒钟排好,
 
数据为15位
twos, 我也看到你说的方法了,sort后再用第一位和第二位比、第二位和第三位比...
一直比到最后。是不是这样。但还有个问题用了sort后找到了相同的,我怎么知道他们在原文件中的位置呢?
 
15位,身份证号码吗?
如果是的话我就帮你想想看.
 
想出来了,等你的答复呢.
 
[:)]
alst.strings
就是他第i行的的值
 
只要比较15位就能判断其比较已经存在. 并能知道它的当前位置.
你想知道我的算法吗?
 
用个二维数组,第一列放数据,第二列放其在源文件中的位置.
 
你可以pos定位!!
 
极速搜索.
不管你有多少万条,只要比较15位就能找到.
 
不是身份证号码吗,
wlmmlw:我很想知道,说说你的方法啊。
yl0971:二维数组我不熟,能帮忙说清楚点么,最好写个代码给我看看。
谢了
 
s: array of integer of integer;
begin
setlength(s,1,y);
s[0][y]中放数据
s[1][y]中放数据在文件中的位置
end;
 
只要对s[0][y]进行排序就可以,具体用什么排序方法,可以去看看数据结构,里面很多,但不一定都适合你的情况.找一种最优的就可以了.如果知道有多少数据,用静态数组就可以实现.
 
多人接受答案了。
 
后退
顶部