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

sắp xếp mảng bằng thuật toán tráo đổi và nổi bọt

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 (309.17 KB, 11 trang )

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





×