Tải bản đầy đủ (.pdf) (7 trang)

Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 6: Giải thuật sắp xếp - Trường Đại học Công nghiệp Thực phẩm Tp. Hồ Chí Minh

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

<span class='text_page_counter'>(1)</span><div class='page_container' data-page=1>

Ch

ươ

ng 6: Gi

i thu

t s

p x

ế

p



1. S

p x

ế

p ch

n (Selection Sort)


2. S

p x

ế

p chèn (Insert Sort)


3. S

p x

ế

p n

i b

t (Bubble Sort)


4. S

p x

ế

p nhanh (Quick Sort)


5. S

p x

ế

p vun

đố

ng (Heap Sort)


6. S

p x

ế

p hòa nh

p (Merge Sort)



Ngô Công Thắng Bài giàng CTDL&GT - Chương 06 6.1


1. S

p x

ế

p ch

n (Selection Sort)



1.1. Ph

ươ

ng pháp



• Gi

s

c

n

s

p x

ế

p

t

ă

ng d

n

m

t dãy khố


a

<sub>1</sub>

, a

<sub>2</sub>

,..., a

<sub>n</sub>

.



Ý t

ưở

ng c

a thu

t tốn

nh

ư

sau

:



– Ch

n ph

n t

có khố nh

nh

t .


Đổ

i ch

nó v

i ph

n t

a

<sub>1</sub>

.



</div>
<span class='text_page_counter'>(2)</span><div class='page_container' data-page=2>

1.1. Ph

ươ

ng pháp (

<i>ti</i>

<i>ế</i>

<i>p</i>

)



Ví d

:



Cho dãy khố ban

đầ

u là: 6, 10, 1, 8, 9


v

i n=5.



i=1 1, 10, 6, 8, 9



i=2 1, 6, 10, 8, 9


i=3 1, 6, 8, 10, 9


i=4 1, 6, 8, 9, 10



Ngô Công Thắng Bài giàng CTDL&GT - Chương 06 6.3


1.1. Ph

ươ

ng pháp (

<i>ti</i>

<i>ế</i>

<i>p</i>

)



Procedure selectionSort(a,n);
For i:= 1 to n-1 Do


Begin


1) {Tìm phần tửnhỏnhất ở vịtrí k }
+) k:=i;


+) For j:=i+1 To n Do


If a[j] < a[k] then k:=j


2) {Đổi chỗ phần tử nhỏ nhất ở vị trí k cho vịtrí i}
If k ≠ i then a[k]↔a[i];


</div>
<span class='text_page_counter'>(3)</span><div class='page_container' data-page=3>

2. S

p x

ế

p chèn (Insert Sort)



2.1. Ph

ươ

ng pháp



Ph

ươ

ng pháp này

đượ

c nh

ng ng

ườ

i ch

ơ

i bài hay



dùng.




Gi

s

c

n s

p x

ế

p t

ă

ng d

n dãy khoá a

<sub>1</sub>

, a

<sub>2</sub>

,..., a

<sub>n</sub>

. Ý



t

ưở

ng thu

t toán nh

ư

sau:



– Các phần tửđược chia thành dãy đích: a<sub>1</sub>,..., a<sub>i-1</sub> (kết quả)


và dãy nguồn a<sub>i</sub>,..., a<sub>n</sub>.


– Bắt đầu với i=2, ở mỗi bước phần tử thứ i của dãy nguồn


được lấy ra và chèn vào vị trí thích hợp trong dãy đích sao
cho dãy đích vẫn tăng dần. Sau đó i tăng lên 1 và lặp lại.


Ngô Công Thắng Bài giàng CTDL&GT - Chương 06 6.5


2.1. Ph

ươ

ng pháp



Ví d

: Cho dãy khoá 6, 10, 1, 7, 4 v

i n=5 (dãy


s

có 5 ph

n t

).



Dãy

đ

ích

Dãy ngu

n



6

10, 1, 7, 4



i=2 6, 10

1, 7, 4



i=3 1, 6, 10

7, 4



i=4 1, 6, 7, 10

4




</div>
<span class='text_page_counter'>(4)</span><div class='page_container' data-page=4>

Th

t

c chèn



Procedure insertSort(a,n)
1) a[0]:=-∞


2) For i:=2 to n Do
Begin


tg:=a[i]; j:=i-1;
While tg<a[j] Do


Begin


a[j+1]:=a[j]; j:=j-1;
End;


a[j+1]:=tg; {đưa tg vào đúng vi trí, chèn vào sau j}
End;


Return


Ngô Công Thắng Bài giàng CTDL&GT - Chương 06 6.7


2.2.

Đ

ánh giá thu

t tốn



Phép tốn tích c

c trong thu

t tốn này là



phép so sánh (tg<a[j]). S

phép toán so sánh C




đượ

c tính nh

ư

sau:



Tr

ườ

ng h

p thu

n l

i nh

t là dãy khoá a

<sub>1</sub>

, a

<sub>2</sub>

,..., a

<sub>n</sub>


đ

ã

đượ

c s

p, nh

ư

v

y m

i l

n ch

c

n 1 phép so



</div>
<span class='text_page_counter'>(5)</span><div class='page_container' data-page=5>

2.2.

Đ

ánh giá thu

t tốn



• Trường hợp xấu nhất nếu dãy khoá sắp theo thứ tự ngược với


thứ tự sắp xếp thì ở lượt i cần có: C= (i-1) phép so sánh. Do
vậy


• Trường hợp trung bình: Giả sử mọi giá trị khoá đều xuất hiện


đồng khả năng thì trung bình phép so sánh ở lượt thứ i là C<sub>i</sub>=
i/2, do đó số phép so sánh trung bình của giải thuật này là:


• O(n2)


Ngơ Cơng Thắng Bài giàng CTDL&GT - Chương 06 6.9


3. S

p x

ế

p s

i b

t (Bubble Sort)



3.1. Ph

ươ

ng pháp



Gi

s

c

n s

p x

ế

p t

ă

ng d

n dãy khoá a

<sub>1</sub>

, a

<sub>2</sub>

,..., a

<sub>n</sub>

. Ý



t

ưở

ng thu

t toán nh

ư

sau:




– So sánh các cặp phần tử liền kềgối nhau từ phải qua


trái,nếu phần tử đứng sau nhỏ hơn đứng trước thì đổi


chỗ. Kết quả lần thứ nhất phần tử nhỏ nhất của dãy


được đẩy lên vị trí 1 (gọi là phần tử được sắp).


– Tiếp tục đổi chỗ các phần tử liền kề của dãy chưa
sắp, lần thứ 2 ta được phần tử nhỏ nhất của dãy được


đưa về vị trí 2.


</div>
<span class='text_page_counter'>(6)</span><div class='page_container' data-page=6>

3.1. Ph

ươ

ng pháp (

<i>ti</i>

<i>ế</i>

<i>p</i>

)



d

: Cho dãy khố ban

đầ

u là: 6, 3, 7,


10, 1, 8 v

i n=6.



6, 3, 7, 10, 1, 8


i=1 1, 6, 3, 7, 10, 8


i=2 1, 3, 6, 7, 8, 10


i=3 1, 3, 6, 7, 8, 10


i=4 1, 3, 6, 7, 8, 10


i=5 1, 3, 6, 7, 8, 10



Ngô Công Thắng Bài giàng CTDL&GT - Chương 06 6.11


Th

t

c s

p x

ế

p n

i b

t



Procedure bubbleSort(a,n)



For i:= 1 to n-1 Do



For j:= n downto i+1 Do


If a[j]<a[j-1] then



</div>
<span class='text_page_counter'>(7)</span><div class='page_container' data-page=7>

3.2.

Đ

ánh giá thu

t tốn



Gi

i thu

t này t

ươ

ng t

nh

ư

gi

i thu

t s

p x

ế

p b

ng



cách ch

n tr

c ti

ế

p (m

c 1), do

đ

ó có:



Nh

n xét: V

i 3 ph

ươ

ng pháp s

p x

ế

p trên, n

ế

u n



v

a và nh

thì ph

ươ

ng pháp chèn tr

c ti

ế

p (insert



sort) t

ra t

t h

ơ

n, n

ế

u v

i n l

n thì c

3 ph

ươ

ng



pháp

đề

u có c

p O(n

2

<sub>), </sub>

<sub>đ</sub>

<sub>ây là m</sub>

<sub>ộ</sub>

<sub>t chi phí th</sub>

<sub>ờ</sub>

<sub>i gian </sub>



khá cao.



Ngơ Cơng Thắng Bài giàng CTDL&GT - Chương 06 6.13


4. S

p x

ế

p nhanh (Quick Sort)



4.1. Ph

ươ

ng pháp



• S

p

x

ế

p

nhanh

(quick sort) còn

đượ

c

s

p

x

ế

p phân



đ

o

n (partition sort

)

.




Ý t

ưở

ng thu

t tốn:



– Chọn ngẫu nhiên một phần tử x.


– Duyệt từ bên trái mảng cho tới khi có một phần tử
a<sub>i</sub>>=x


– Sau đó duyệt từ bên phải mảng cho tới khi có một
phần tử aj=<x


– Đổi chỗ a<sub>i</sub> và a<sub>j</sub>


</div>

<!--links-->

×