a.
快速排序:
procedure qsort(l,r:integer);
var i,j,mid:integer;
begin
i:=l;j:=r; mid:=a[(l+r) div 2];
repeat
while a[i]
在左半部分尋找比中間數大的數
}while a[j]>mid do dec(j);
if i<=j then begin
swap(a[i],a[j]);
inc(i);dec(j);
end;
until i>j;
if l
若未到兩個數的邊界,則遞迴搜尋左右區間
}if i
插入排序:
思路:當前
a[1]..a[i-1]
已排好序了,現要插入
a[i]
使a[1]..a[i]
有序。procedure insert_sort;
var i,j:integer;
begin
for i:=2 to n do begin
a[0]:=a[i];
j:=i-1;
while a[0]
選擇排序:
procedure sort;
var i,j,k:integer;
begin
for i:=1 to n-1 do
for j:=i+1 to n do
if a[i]>a[j] then swap(a[i],a[j]);
end;
d. 氣泡排序
procedure bubble_sort;
var i,j,k:integer;
begin
for i:=1 to n-1 do
for j:=n downto i+1 do
if a[j]
每次比較相鄰元素的關係
}end;
e.堆排序:
procedure sift(i,m:integer);
var k:integer;
begin
a[0]:=a[i]; k:=2*i;
while k<=m do begin
if (k
找出a[k]
與a[k+1]
中較大值
}if a[0]
將根放在合適的位置
}end;
procedure heapsort;
varj:integer;
begin
for j:=n div 2 downto 1 do sift(j,n);
for j:=n downto 2 do begin
swap(a[1],a[j]);
sift(1,j-1);
end;
end;
f. 歸併排序
procedure merge(var a:listtype; p,q,r:integer);
var i,j,t:integer;
tmp:listtype;
begin
t:=p;i:=p;j:=q+1;
while (t<=r) do begin
if (i<=q) and ((j>r) or (a[i]<=a[j]))
then begin
tmp[t]:=a[i]; inc(i);
endelse begin
tmp[t]:=a[j];inc(j);
end;
inc(t);
end;
for i:=p to r do a[i]:=tmp[i];
end;
procedure merge_sort(var a:listtype; p,r: integer);
var q:integer;
begin
if p<>r then begin
q:=(p+r-1) div 2;
merge_sort (a,p,q);
merge_sort (a,q+1,r);
merge (a,p,q,r);
end;
end;
begin
merge_sort(a,1,n);
end.
g.基數排序
思想:對每個元素按從低位到高位對每一位進行一次排序
四 排序演算法
1.快速排序 procedure qsort l,r integer var i,j,mid integer begin i l j r mid a l r div 2 repeat while a i mid do dec j if i j then begin swap a i a j inc ...
四 排序演算法 快速排序
快速排序的思想 選擇陣列中的乙個數作為中軸線,然後以這個中軸線為中心,大於中軸線的資料放到右邊,小於中軸線的資料放到左邊,然後每次比較完後再變中軸線的位置,不斷比較下去 include using namespace std template void quick sort t arry,int l...
演算法1 排序
氣泡排序 氣泡排序,比較相鄰的元素由小到大排序 function bubblesort arr return arr view code 快速排序 以基數為標準,最右開始查小於基數停止,最左邊開始查大於基數停止,互換位置停止的位置 left right表示基數左為小於基數,基數右大於基數的 拆分基數...