直接插入法算法如下:
12 8 7 9 3
------------------------------------
8 12 7 9 3 8比12小,插入到12前
7 8 12 9 3 7比8小,插入到8前
7 8 9 12 3 9比8大,比12小,插入到两者之间
3 7 8 9 12 3比7小,插入到7之前我的写法如下,用了三个循环,觉得可改进,请帮忙.
function TForm1.insert(a: array of integer): tstringlist;
var i,j,k,l:integer;
list: tStringlist;
begin
for i := low(a)+1 to high(a) do
begin
for j := low(a) to i-1 do
begin
if a[i] < a[j] then
begin
k := a[i];
for l := i downto j+1 do
begin
a[l] := a[l-1];//移位;
end;
a[j] := k;
break;
end;
end;
end;
list := tstringlist.Create;
for i := low(a) to high(a) do
list.Add(inttostr(a[i]));
result := list;
end;
12 8 7 9 3
------------------------------------
8 12 7 9 3 8比12小,插入到12前
7 8 12 9 3 7比8小,插入到8前
7 8 9 12 3 9比8大,比12小,插入到两者之间
3 7 8 9 12 3比7小,插入到7之前我的写法如下,用了三个循环,觉得可改进,请帮忙.
function TForm1.insert(a: array of integer): tstringlist;
var i,j,k,l:integer;
list: tStringlist;
begin
for i := low(a)+1 to high(a) do
begin
for j := low(a) to i-1 do
begin
if a[i] < a[j] then
begin
k := a[i];
for l := i downto j+1 do
begin
a[l] := a[l-1];//移位;
end;
a[j] := k;
break;
end;
end;
end;
list := tstringlist.Create;
for i := low(a) to high(a) do
list.Add(inttostr(a[i]));
result := list;
end;
procedure Selection_Sort(var L:array of integer);
var
i,j:integer;
v:integer;
begin
for i:=low(L)+1 to high(L) do
begin
v:=L[i];
j:=i;
while (j<>low(L))and(L[j-1]< v) do //循环找到插入点
begin
L[j]:=L[j-1]; //移动元素
j:=j-1;
end;
L[j]:=v; //插入元素
end;
end;