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 4: Giải thuật sắp xếp và tìm kiếm đơn giản - 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 (92.84 KB, 7 trang )

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

Ch

ươ

ng 4: Gi

i thu

t s

p x

ế

p và


tìm ki

ế

m

đơ

n gi

n



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. Tìm ki

ế

m tu

n t

(Sequence Search)



Ngơ Cơng Thắng Bài giảng CTDL&GT - Chương 04 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 toá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 khoá 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 04 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


{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


{Đổi chỗ phần tử nhỏ nhất k cho phần tử 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.2.

Đ

ánh giá gi

i thu

t



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



V

i gi

i thu

t trình bày

trên thì phép tốn tích c

c



là phép so sánh (a[j]<a[k]).



G

i C là s

l

ượ

ng phép so sánh, C

đượ

c tính nh

ư

sau:



l

ượ

t th

i (i=1, 2,… , n-1),

để

tìm khố nh

nh

t


c

n n-i phép so sánh. S

l

ượ

ng phép so sánh này


không ph

thu

c vào tình tr

ng ban

đầ

u c

a dãy


khố. Do

đ

ó ta có:



V

y,

độ

ph

c t

p tính tốn là O(n

2

)



6.5


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


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

2.1. Ph

ươ

ng pháp



Ví d

: Cho dãy khố 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



i=5 1, 4, 6, 7, 10



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


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; {chèn tg vào sau a[j]}
End;


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

2.2.

Đ

ánh giá thu

t tốn



Phép tốn tích c

c trong thu

t toá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


sánh. Do v

y



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


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ị khố đề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à:


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

3. S

p x

ế

p n

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 từng cặp khóa liền kề, gối nhau từ phải qua trái,
nếu khóa đứng sau nhỏ hơn khóa đứng trước thì đổi chỗ.
Loạt so sánh thứ nhất thì khóa nhỏ nhất của dãy được đẩy
lên vị trí đầu tiên (gọi là phần tử được sắp).


– Tiếp tục so sánh và đổi chỗ các phần tử liền kề gối nhau của
dãy chưa sắp, lần thứ 2 ta được số nhỏ nhất của dãy chưa
sắp được đưa lên đầu dãy chưa sắp(ví trí 2).


– Cứ tiếp tục làm tương tự như trên cho đến khi dãy chỉ cịn
1 phần tử.


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



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



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

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



a[j] <-> a[j-1];


Return



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


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>



</div>

<!--links-->

×