两个子数组,A1[1..k],A2[k+1..n].A1,A2都已经从小到大排好序.要求把A1,A2合并成一个排好序的数组
要求:最坏情况下的时间复杂度为O(N)
辅助空间为O(1) 写出算法,或者用delphi实现。
要求:最坏情况下的时间复杂度为O(N)
辅助空间为O(1) 写出算法,或者用delphi实现。
解决方案 »
- 请求Borland Delphi 7的serial number和authorization key
- 调用WebService时,出现服务器未能识别HTTP头的错误怎么解决?
- D7中用IdTCPClient控件在断开是出现错误IdTelnet控件在断开是出现错误, 错误是说(raised exception class EIdCloseSocket with message
- 在Delph中如何调用选文件档的对话框?
- 怎样调用事件过程
- 弱问一下,自定义的函数和变量放在哪声明?
- 多谢飞飞猫,我也3个了我不想散分怕人误会我倒分问了个问题给分大家请进交流一下,也交个朋友
- 拨号网络
- 成为一名好程序员的必要因素是哪些!?
- 怎样彻底关闭一个adoconnection的连接
- 不知是那里出了问题
- 有人用过TElStringGrid控件?请教关于标题栏的问题?
我知道这个排序很简单。
procedure sort(var a1,a2,a3:array of integer);
var
i,j,n:integer;
begin
i:=0;
j:=0;
for n:=low(a3) to high(a3) do
begin
if (i>high(a1)) and (j<=high(A2)) then
begin
A3[n]:=A2[j];
j:=j+1;
continue;
end; if (j>high(A2)) and (i<=high(A1)) then
begin
A3[n]:=A1[i];
i:=i+1;
continue;
end; if (i>high(A1)) and (j>high(A2)) then exit;
case (A2[j]>=A1[i]) of
true:begin
A3[n]:=A1[i];
i:=i+1;
end;
false:begin
A3[n]:=A2[j];
j:=j+1;
end;
end;
end;
end;
Function InsertinArray(Index:Integer;Value:Double;A:TArray1D):TArray1D;
Var
i,Size:Integer;
Begin
Size:=length(A);
SetLength(Result,Size+1);
For i:=0 to Index-1 do
Result[i]:=A[i];
Result[Index]:=Value;
For i:=Index+1 to Size Do
Result[i]:=A[i-1];
End;//然后进行排序和并
Procedure SortMerg(A1,A2:TArray1D);
Var
i,j,k:Integer;
Begin
k:=0;
For i:=Low(A2) to High(A2) do
Begin
j:=k;
While (j<=High(A2))Do
Begin
If j>0 then
Begin
If (A2[i]<=A1[j]) and A2[i]>A1[j-1]) Then
Begin
k:=j;
A1:=InsertinArray(j,A2[i],A1); //这里不知道对不对,可能需要一个辅助数组
Break;
End Else
Inc(j);
End Else
Begin
If A2[i]<A1[0] Then
Begin
k:=0;
A1:=InsertinArray(0,A2[i],A1); //这里不知道对不对,可能需要一个辅助数组
Break;
End Else
Inc(j);
End;
End; //End While
End; //End For
End;
//然后进行排序和并
Procedure SortMerg(A1,A2:TArray1D);
Var
i,j,k:Integer;
Begin
k:=-1;
For i:=Low(A2) to High(A2) do
Begin
j:=k+1;
While (j<=High(A2))Do
Begin
If j>0 then
Begin
If (A2[i]<=A1[j]) and A2[i]>A1[j-1]) Then
Begin
k:=j;
Break;
End Else
Inc(j);
End Else
Begin
If A2[i]<A1[0] Then
Begin
k:=0;
Break;
End Else
Inc(j);
End;
End; //End While
A1:=InsertinArray(k,A2[i],A1); //这里不知道对不对,可能需要一个辅助数组
End; //End For
End;
注意:不是只要能实现就可以了。这样的题目光实现的话,绝大多数人都能轻松做出来的。问题是在实现的时候还有条件:
1、时间复杂度为O(n),
2、辅助空间为O(1)。如果觉得这个题目说的不够详细,那就到这里了。再放两天我就结贴。