简单算法问题(考试题目)(50分)

  • 主题发起人 主题发起人 feiren
  • 开始时间 开始时间
F

feiren

Unregistered / Unconfirmed
GUEST, unregistred user!
数组A,删除〈y的所有元素,编写一个过程;
要求高效率,
哪位大哥帮我一下,给个思路,有代码最好,我急用
 
???
数组的元素是不可以删除的.只可以清空.
begin
for I := Low(a) to High(a)do
if a<y then
a:= 0;
end;
 
数组元素是不能删除的,如果是动态数组的话,可以重新设置数组元素个数
j:integer;
j:=0;
for i:=low(a) to high(a)do
begin
if a>=y then
begin
a[j]:=a;
inc(j);
end;
end;
setlength(a,j);
 
//过滤完的排在前面,后面全是 MaxInt 。
procedure dely_Sort(var a:array of integer;y:integer);
var
i,j:Integer;
begin
for i := Low(a) to High(a)do
begin
if a<y then
begin
for j:=i to High(a)-1do
begin
a[j]:= a[j+1];
end;
a[j]:=MaxInt;
end
else
begin
end;
end;
end;

//过滤完的排在前面,后面全是 MaxInt,但顺序被打乱 ,速度比上面的快。
procedure dely_NotSort(var a:array of integer;y:integer);
var
i,j:Integer;
begin
j:=High(a);
for i := Low(a) to High(a)do
begin
if a<y then
begin
while a[j]<ydo
begin
a[j]:=MaxInt;
dec(j);
end;
if i<j then
begin
a:=a[j];
a[j]:=MaxInt;
end
else
begin
a:=MaxInt;
break;
end;
end
else
begin
end;
end;
end;
 
对不起 不应替换为 0 而应是 MaxInt
 
kygl, 的代码确实最快!厉害!
 
//如果不是动态的数组,只须加一点,而且想替换成什么都无所谓了。
procedure dely_Sort_Quick(var a:array of integer;y:integer);
var
i,j:Integer;
begin
j:=0;
for i := Low(a) to High(a)do
begin
if a>=y then
begin
a[j]:= a;
inc(j);
end
else
begin
end;
end;
if j<high(a) then
begin
for i := j to High(a)do
begin
a:= 0;

end;
end;
end;
 
多人接受答案了。
 
后退
顶部