procedure TForm1.Button1Click(Sender: TObject); var i,j,m:integer; A :array[0..9] of integer; B :array of integer; OutStr:String; begin A[0]:=2; A[1]:=5; A[2]:=3; A[3]:=9; A[4]:=6; A[5]:=17; A[6]:=23; A[7]:=12; A[8]:=0; A[9]:=8; OutStr:=''; m:=7; SetLength(B,m); for j:=0 to m do begin if j=0 then begin B[j]:=A[0]; for i:=low(A) to high(A) do begin if (A[i]<B[j]) then B[j]:=A[i]; end; end else begin B[j]:=A[0]; for i:=low(A) to high(A) do begin if (A[i]>B[j]) then B[j]:=A[i]; end; for i:=low(A) to high(A) do begin if (A[i]<B[j]) and (A[i]>B[j-1]) then B[j]:=A[i]; end; end; OutStr:=OutStr+' '+IntToStr(B[j]); end; ShowMessage('BÊý×éΪ'+OutStr); end;答案是出来了.谁能不能帮我优化一下..
用插入排序procedure TForm1.Button1Click(Sender: TObject); var i, j, n, m: Integer; A: array[0..9] of Integer; B: array of Integer; OutStr: String; begin A[0] := 2; A[1] := 5; A[2] := 3; A[3] := 9; A[4] := 6; A[5] := 17; A[6] := 23; A[7] := 12; A[8] := 0; A[9] := 8; OutStr := ''; m := 7; SetLength(B, m); for i := 0 to 9 do begin n := -1; for j := 0 to Min(i - 1, m - 1) do if A[i] > B[j] then n := j else Break; if n > m - 2 then Continue; for j := m - 1 downto n + 2 do B[j] := B[j - 1]; B[n + 1] := A[i]; end; for i := 0 to m - 1 do OutStr := OutStr + ' ' + IntToStr(B[i]); ShowMessage('B:'+ Trim(OutStr)); end;
为什么你这个B不会溢出呢?m+3时候也不会溢出. for i := 0 to m + 3 do OutStr := OutStr + ' ' + IntToStr(B[i]);条件m<n
var i,j,m:integer;
A :array[0..9] of integer;
B :array of integer;
OutStr:String;
begin
A[0]:=2;
A[1]:=5;
A[2]:=3;
A[3]:=9;
A[4]:=6;
A[5]:=17;
A[6]:=23;
A[7]:=12;
A[8]:=0;
A[9]:=8;
OutStr:='';
m:=7;
SetLength(B,m);
for j:=0 to m do
begin
if j=0 then
begin
B[j]:=A[0];
for i:=low(A) to high(A) do
begin
if (A[i]<B[j]) then B[j]:=A[i];
end;
end
else
begin
B[j]:=A[0];
for i:=low(A) to high(A) do
begin
if (A[i]>B[j]) then B[j]:=A[i];
end;
for i:=low(A) to high(A) do
begin
if (A[i]<B[j]) and (A[i]>B[j-1]) then B[j]:=A[i];
end;
end;
OutStr:=OutStr+' '+IntToStr(B[j]);
end;
ShowMessage('BÊý×éΪ'+OutStr);
end;答案是出来了.谁能不能帮我优化一下..
var
i, j, n, m: Integer;
A: array[0..9] of Integer;
B: array of Integer;
OutStr: String;
begin
A[0] := 2;
A[1] := 5;
A[2] := 3;
A[3] := 9;
A[4] := 6;
A[5] := 17;
A[6] := 23;
A[7] := 12;
A[8] := 0;
A[9] := 8;
OutStr := '';
m := 7;
SetLength(B, m);
for i := 0 to 9 do
begin
n := -1;
for j := 0 to Min(i - 1, m - 1) do
if A[i] > B[j] then
n := j
else
Break;
if n > m - 2 then
Continue;
for j := m - 1 downto n + 2 do
B[j] := B[j - 1];
B[n + 1] := A[i];
end;
for i := 0 to m - 1 do
OutStr := OutStr + ' ' + IntToStr(B[i]);
ShowMessage('B:'+ Trim(OutStr));
end;
for i := 0 to m + 3 do
OutStr := OutStr + ' ' + IntToStr(B[i]);条件m<n