C C 演算法例項(四) 排序演算法

2021-06-06 20:48:45 字數 2216 閱讀 7124

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表示基數左為小於基數,基數右大於基數的 拆分基數...