Tải bản đầy đủ (.ppt) (21 trang)

Tài liệu Chương 5: sắp xếp pdf

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (667.71 KB, 21 trang )


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/607&3&,89:
/;

0

.

#
<6=>/,8=,7?&3&,8
&@'&2(*"A&B*5"C7#D
=,7;"E&9/;
.@01'&2("F=G4.#

H





013&&IJK/
2(3/40(/LM12(80N=L0C(#@
3/3&":
0'&3&,80(/LO,:P/M1
10'2("Q0P&3&,8

0(/L/'C#1J&BR,13
/9ST-&U.@#
9ST8"E&0111
T#


#VW3&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
#VW3&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
#W3&[

Ý 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].

\
#W3&[

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]=-∞.

×