主题:[讨论]请教一下 什么叫“二分法”?
编程黑客
[专家分:1660] 发布于 2006-07-30 09:22:00
请教一下 什么叫“二分法”?
请各位回答后并编出具体程序。谢谢[em4]
回复列表 (共8个回复)
沙发
贺天行宝 [专家分:2300] 发布于 2006-07-30 09:27:00
比如你在一百个有序数里面找一个数,你就现在第50个数比那个数大么?大就下一次再50-100里面找,小就在1-50,然后25。。。。。。。
板凳
编程黑客 [专家分:1660] 发布于 2006-07-30 10:28:00
我还要程序
3 楼
dorremon1992 [专家分:870] 发布于 2006-07-30 15:58:00
Program SortForm;
Type Num=Array[1..100]of integer;
Procedure Sort(N:Num;S,L,R:integer);
Begin
if L>R then begin writeln('Haven't found!');halt;end;
if S=N[(L+R)div 2] then begin writeln('Have found!');halt;end
else if S<N[(L+R)div 2] then Sort(N,S,L,(L+R)div 2-1)
else Sort(N,S,(L+R)div 2+1,R);
End;
Var S,i:integer;N:Num;
Begin
readln(S);{查找的数}
for i:=1 to 100 do read(N[i]);
Sort(N,S,1,100);{递归查找}
End.
应该就是这样了
4 楼
jzyaa [专家分:10] 发布于 2006-07-30 16:31:00
procedure sort(var n:num;var s,l,r:integer);
5 楼
编程黑客 [专家分:1660] 发布于 2006-07-30 21:57:00
什么啊??
7 楼
dorremon1992 [专家分:870] 发布于 2006-07-31 10:25:00
[quote]
procedure sort([u]var[/u] n:num;[u]var[/u] s,l,r:integer);[/quote]
这边不需要用var啊!
[em13]
8 楼
bigchen [专家分:1940] 发布于 2006-10-29 22:35:00
二分法就是一种很高效的算法。
比如就是查找,就有二分查找……
总之我也说不清楚了,你自己看程序吧。
顺序表的二分查找:
在顺序表(2,5,7,10,14,15,18,23,35,41,52)中,用二分法查找12,所需的关键码比较的次数为4。
program binarysearch;
const n=20
type arr=array[1..n] of integer;
var a:arr;first,last,I,x:integer;
procedure search(x,top,bot:integer);
var mid:integer;
begin
if top<= bot then
begin
mid:=(top+bot)div 2;
if x=a[mid] then writeln(mid) {递归终止返回}
else if x<a[mid] then search(x,top,mid-1) {递归调用}
else search(x,mid+1,bot) {递归调用}
end;
else writeln(‘no’);{递归终止返回}
end;
begin
for I=1 to 20 do read(a[I]);read(x);first:=1;last:=n;search(x,first,last)
end.
我来回复