1
SẮP XẾP
5.1 Phương pháp chọn
5.2 Phương pháp chèn
5.3 Phương pháp chèn nhị phân
5.4 Phương pháp nổi bọt
5.5 Phương pháp sắp xếp nhanh
5.6 Phương pháp vun đống
!
"
#$
%
"
&
'
((
&)
*"
&'
+
'
,-
.'
+
(,
+
'
(/
#01
2(3/4,5/607&3&,89:
/;
0
.
#
<6=>/,8=,7?&3&,8
&@'&2(*"A&B*5"C7#D
=,7;"E&9/;
.@01'&2("F=G4.#
H
013&&IJK/
2(3/40(/LM12(80N=L0C(#@
3/3&":
0'&3&,80(/LO,:P/M1
10'2("Q0P&3&,8
0(/L/'C#1J&BR,13
/9ST-&U.@#
9ST8"E&0111
T#
#VW3&X
Ý tưởng:
Dãy khóa cần sắp xếp là k[1],k[2],…, k[n]. Ở
lượt thứ i (i=1,2,3,…,n-2) ta sẽ chọn trong
dãy khóa k[i+1],…., k[n] khóa nhỏ nhất và
đổi chỗ nó với k[i]
Sau n-1 lượt khóa từ nhỏ đến lớn sẽ được sắp
xếp ở các vị trí thứ 1, thứ 2,…thứ n-1, thứ n.
Y
#VW3&X
Thuật toán:
void SX_chon(int *k, int n)
{int i,x;
for(i=1;i<n-1;i++)
{int m=i;
for(int j=i+1;j<n;j++)
if(k[j]<k[m]) m=j;
if(m!=i)
{ x=k[i]; k[i]=k[m]; k[m]=x;}
}
return;
}
Z
#W3&[
Ý tưởng:
Dãy khóa cần xếp là k[1], k[2],…, k[n].
Đầu tiên khóa k[1] chỉ có một khóa đã được
sắp xếp. Xét thêm k[2],so sánh nó với k[1]
để xác định chỗ chèn nó vào và ta có 2 khóa
được sắp xếp. Đối với k[3] lại so sánh với
k[2], k[1] và cứ như vậy đến khi xét xong
k[n].
\
#W3&[
Cài đặt:
Để có chỗ cho khóa mới phải dịch chuyển các
khóa lùi lại sau và dùng X làm ô nhớ phụ
chứa khóa đang được xét. Để khóa mới dù ở
vị trí đầu tiên cũng được chèn vào giữa
khóa nhỏ và lớn hơn nó, ta thêm vào khóa
giả k[0]=-∞.