1、快速排序法(這個最容易迷惑){=====================================================================
函數名:QuickSort
作者:pyg
日期:2000-01-01
功能:快速排序法
輸入參數:A 待排序數組;iLo 數組最小下標;iHi:數組最大下標
返回值:無
修改記錄:2008-07-01
=====================================================================}
procedure QuickSort(var A: array of Integer; iLo, iHi: Integer);
var
Lo, Hi, Mid, T: Integer;
begin
Lo := iLo;
Hi := iHi;
Mid := A[(Lo + Hi) div 2]; //數組中間位置的值,注意A下標從0開始計算
repeat
//如果左邊的A[Lo]小於中間值則此值不動下標+1,直到找到大於或等於中間值,用於與右邊的調換
while A[Lo] < Mid do Inc(Lo);
//如果左邊的A[Hi]大於中間值則此值不動,下標-1,直到找到小於或等於中間值,用於與左邊的調換
while A[Hi] > Mid do Dec(Hi);
//如果上邊的操作尚未循環到中間位置則,將上邊所得的左右值進行交換
if Lo <= Hi then
begin
T := A[Lo];
A[Lo] := A[Hi];
A[Hi] := T;
//交換後,繼續向中間位置靠攏,下標做相應移動
Inc(Lo);
Dec(Hi);
end;
{當左邊移動的下標大於右邊的下標時,代表一輪排序結束,此時左邊爲小於中間位置的值部分
右邊爲大於中間位置值的部分,兩部分數組個數不一定對稱(相等)
}
until Lo > Hi;
//遞歸對做半部分進行再次排序
if Hi > iLo then QuickSort(A, iLo, Hi);
{遞歸對做右部分進行再次排序(此時的Lo,iHi值爲第一輪排序結束的值,不會因爲左半部分的再次排序而改變
,因爲遞歸調用時,所傳的變量爲函數內部的變量}
if Lo < iHi then QuickSort(A, Lo, iHi);
end;
2、冒泡排序法(2種接口)
procedure BubbleSort(var Num: TArray; NumSize: Integer);
var
pass, I, Tmp, NumTmp: Integer;
begin
//1.for實現
for pass := 1 to NumSize - 1 do
begin
Tmp := NumSize - pass;
for I := 0 to Tmp - 1 do
begin
if Num[I] > Num[I + 1] then
begin
NumTmp := Num[I];
Num[I] := Num[I + 1];
Num[I + 1] := NumTmp;
end;
end;
end;
//2.while實現
{ pass := 1;
I := 0;
SetLength(Num, NumSize);
while pass < NumSize do //共進行NumSize - 1 輪
begin
Tmp := NumSize - pass;
while I < Tmp do //比較一輪
begin
if Num[I] > Num[I + 1] then
begin
NumTmp := Num[I];
Num[I] := Num[I + 1];
Num[I + 1] := NumTmp;
end;
Inc(I);
end;
Inc(pass);
end; }
end;
procedure BubbleSort2(var SortArray: array of Integer);
var
I, J, Tmp: Integer;
begin
for I := High(SortArray) downto Low(SortArray) do
begin
for J := Low(SortArray) to High(SortArray) - 1 do
begin
if SortArray[J] > SortArray[J + 1] then
begin
Tmp := SortArray[J];
SortArray[J] := SortArray[J + 1];
SortArray[J + 1] := Tmp;
end;
end;
end;
end;
3、插入排序法(兩種接口)
procedure InsertSort(var Num: TArray; NumSize: Integer);
var
Inserter, Index, I: Integer;
begin
for I := 1 to NumSize - 1 do //共執行NumSize - 1輪
begin
Inserter := Num[I];
Index := I - 1;
while (Index >= 0) and (Inserter < Num[Index]) do //尋找插入點
begin
Num[Index + 1] := Num[Index]; //後挪一個位置
Index := Index - 1;
end;
Num[Index + 1] := Inserter; //插入
end;
end;
procedure InsertSort2(var Num: Array of Integer);
var
Inserter, Index, I: Integer;
begin
for I := Low(Num) + 1 to High(Num) do
begin
Inserter := Num[I];
Index := I - 1;
while (Index >= 0) and (Inserter < Num[Index]) do
begin
Num[Index + 1] := Num[Index];
Index := Index - 1;
end;
Num[Index + 1] := Inserter;
end;
end;
4、判斷素數(附加一個,呵呵,面試總整出這個)
function IsPrime(aNum: Integer): Boolean;
var
I, Tmp: Integer;
begin
Result := True;
if aNum <= 1 then
begin
Result := False;
exit;
end;
Tmp := Trunc(Sqrt(aNum));
//1.for實現
for I := 2 to Tmp do
begin
if aNum mod I = 0 then
begin
Result := False;
break;
end;
end;
//2.while 實現
{I := 2;
while I <= Tmp do
begin
if aNum mod I = 0 then
begin
Result := False;
Break;
end;
Inc(I);
end; }
end;
排序法
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.