1. Sắp xếp (sorting)
Bài toán:
2. Sắp xếp bằng lựa
chọn (selection sort)
Thủ tục lựa chọn:
3. Sắp xếp bằng trao
đổi ( exchange sort)
Thủ tục trao đổi:
td
lc
Ct.1
Ct.2
{thủ tục sắp xếp bằng trao đổi}
Sắ
p xếp làp xế
bốp trí
lại thứ tự các đối tượng
Procudure
{thủ tục sắsxep2;
bằng lựa chọn}
nhằ
m thoả
mãinteger;
n một yê
u Boolean;
cầu nào đó. Yêu
Var
i,
M,
tg:
OK:
Procedure sxep1;
cầ
u để theo đó mà tiến hành sắp xếp gọi là
Begin
Cho
nguyêinteger;
n K = {k1, k2, …, kn}. Cần
Var dãyi,số
j, min,tg:
khoáM:=N;
sắp xếp.
sắBegin
p xếp lại các phần tử của K sao cho sau
khi Repeat
sắp For
xếpi:=xong
thì do
K trở thành dãy tăng
1 to N-1
dầnBegin
. OK:= True; M:= M-1;
i:= 113
to M24
do 65 8 19 27 30
Ví dụ: For
K=
Min:= i;
IF K[i] > K[i+1] Then
For
N doc dãy tăng
Sau khiBegin
sắpj:=
xếi+1
p tato đượ
If K[min]
> K[j]K[i+1];
then min:=j;
tg:=
K[i]; K[i]:=
K[i+1]:= tg;
13 K[min];
19 24 K[min]:=
27 30 tg;
65
K=
tg:= K[i];8 K[i]:=
OK:= False;
End; End;
End; Until OK;
End;
K= 12
i=1
8
25
16
4
6
31
22
N
min=1
Bắt đầu
Sắp xếp bằng lựa chọn
i:=1, min:=i
j:=i+1
Đ
K[min]>K[j]
Min:=j
S
S
Kết thúc
Đ
i >= N
i:=i+1
j:=j+1
j>N
S
Đ
Đổi chỗ
k[min] với K[i]
►
j=2
K=
12
i=1
8
25
min=1
Procedure sxep1;
Var
16
4
6
31
K[min]>K[ j ]?
22
N
i, j, min,tg: integer;
Begin
For i:= 1 to N-1 do
Begin
Min:= i;
For j:= i+1 to N do
If K[min] > K[j] then min:=j;
tg:= K[i]; K[i]:= K[min]; K[min]:= tg;
End;
End;
►
j=2
K= 12
8
25
16
4
6
31
22
i=1
min=1
Procudure sxep;
Var
i, j, k,tg: integer;
Begin
For i:= 1 to N-1 do
Begin
Min:= i;
For j:= i+1 to N do
If
K[min] > K[j] then min:=j;
tg:= K[i]; K[i]:= K[min]; K[min]:= tg;
End;
End;
►
i=1
K=
12
8
25
16
4
6
Baét ñaàu
M
31
22
M
M=N
Saép xeáp baèng trao ñoåi
N
Đúng
M<2
Đưa ra K rồi kết thúc
Sai
M
M-1; i
i
Đúng
Đổi ki và ki+1
Đúng
0
i+1
i>M
Sai
ki> k i+1
Sai
►
i=1
K=
12
8
25
16
4
6
31
22
M
M=N
Procudure sxep2;
Var
i, M, tg: integer; OK: Boolean;
Begin
M:=N;
Repeat
OK:= True; M:= M-1;
For i:= 1 to M do
IF K[i] > K[i+1] Then
Begin
tg:= K[i]; K[i]:= K[i+1]; K[i+1]:= tg;
OK:= False;
End;
Until OK;
End;
►
j=2
K= 12 T
i=1
min=1
8
j=3
j=4
F 25 F 16 T 4
min=2
K[min]>K[ j ]?
j=3
K=
4
8
i=2
j=5
j=4
j=6
min=5
j=5
j=6
F 25 F 16 F 12 T 6
6
25
8
i=3
•
j=7
j=8
F 31 F 22
min=6
j=4
4
j=8
F 6 F 31 F 22
min=2
K=
j=7
min=3
T
16
min=4
j=6
j=5
T
12
min=5
T
8
j=7
j=8
F 31 F 22
min=6
•
•
•
K= 4
6
8
12
16
22
25
31
►
F
F
G
B
G
B E
E
K
• Sắp xếp K
ñeå laømII gì? JJ
A
A D
H
H
D
C
C
• Laøm theá naøo ñeå saép xeáp?
LL
►
i = i=1
1
K=
2
3
i=2
12 T
8
4
i=3
F
5
i=4
6
i=5
25 T 16 T 4 T
6
K=
8
i=2
F
i=3
i=5
i=4
12 F 16 T
4
T
6
i=7
F
8
31 T 22
31
M
So saùnh Ki > Ki + 1
i=1
7
i=6
M=N
i=6
F
25 T 22
25
31
M
i=1
K=
8
i=2
F
i=4
i=3
12 T 4
T
6
i=5
F
16 F 22
25
31
25
31
M
•
•
•
•
K=
4
6
8
12
31
22
►
Hình ảnh nổi bọt khí trong
nước, bọt có thể tích lớn nổi
lên trước
5
3
4
2
6
7
1
►