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

Cấu trúc dữ liệu di động chuong 2

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

ĐẠI HỌC QUỐC GIA TPHCM
TRƯỜNG ĐẠI HỌC
CÔNG NGHỆ THÔNG TIN

CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT
CHƯƠNG II

TÌM KIẾM VÀ SẮP XẾP

Nguyễn Trọng Chỉnh
1



GIẢI THUẬT SẮP XẾP

PHƯƠNG PHÁP QUICK SORT
PHƯƠNG PHÁP MERGE SORT
PHƯƠNG PHÁP RADIX SORT (Sinh viên tự đọc)

2


GIẢI THUẬT SẮP XẾP
PHƯƠNG PHÁP QUICK SORT
* Ý tưởng:(Quick sort - sắp xếp dựa trên phân hoạch)
Giả sử dãy A có n phần tử có thứ tự tăng dần.
- Phần tử chốt (pivot) ak, k = 0,..,n-1 có giá trị khóa
không nhỏ hơn các phần tử của dãy đã có thứ tự
a0,..,ak-1 và có giá trị khóa không lớn hơn các phần tử
của dãy đã có thứ tự ak+1,..an-1.


- Để sắp xếp, chọn một phần tử ak bất kỳ trong A, chia
dãy A thành hai dãy a0,..,ak-1 có giá trị không lớn hơn
ak và dãy ak+1,..,an-1 có giá trị không nhỏ hơn, sắp xếp
hai dãy này theo cách như trên.
3


GIẢI THUẬT SẮP XẾP
PHƯƠNG PHÁP QUICK SORT
* Giải thuật: Sử dụng giải thuật đệ quy như sau:
Đầu vào: dãy al,al+1,..,ar chưa có thứ tự.
Đầu ra: dãy al, al+1,..,ar có thứ tự tăng dần.

- B1: Nếu l < r thì k  (l + r)/2, x  ak, i  l, j  r; ngược lại
qua B6.
- B2: Nếu ai > x, qua B3; ngược lại i  i+1, qua B2.
- B3: Nếu aj < x, qua B4; ngược lại j  j - 1, qua B3.
- B4: Nếu i < j thì hoán đổi ai và aj.

- B5: Thực hiện Quick Sort cho dãy al, al+1,..,ar=j và al=i, ai+1,..,ar
- B6: Kết thúc.
4


GIẢI THUẬT SẮP XẾP
PHƯƠNG PHÁP QUICK SORT
* Cài đặt:
void QuickSort(int *a, int l, int r) {
int i, j, x;
if (l >= r) return;

x = a[(l+r)/2]; i = l; j = r;
while(i < j) {
while (a[i] < x) i++; while (a[j] > x) j--;
if (i <= j) {hoandoi(a[i], a[j]); i++; j--; }
}
QuickSort(a, l, j); QuickSort(a, i, r);
}
5


GIẢI THUẬT SẮP XẾP
PHƯƠNG PHÁP QUICK SORT
l=0
Tìm i

7

x=1

5

8

i=0
l=0
Tìm j

7

7

i=0

4

2

6

5

8

1

4

2

6

8

1

3
j=7
r=7

x=1


5

3
j=7
r=7

x=1

i=0
l=0
Tìm j

1

r=7

4

2

6
j=6

3
6


GIẢI THUẬT SẮP XẾP
PHƯƠNG PHÁP QUICK SORT
l=0

Tìm j

7

x=1

5

8

i=0
l=0
Tìm j

7

7
i=0

4

2

6

3

j=5
x=1


5

8

1

r=7

4

2

6

3

j=4

i=0
l=0
Tim j

1

r=7

x=1

5


8

1
j=3

r=7

4

2

6

3
7


GIẢI THUẬT SẮP XẾP
PHƯƠNG PHÁP QUICK SORT
l=0
Tìm i

1

x=1

5

8


i=1

j=2

l=0
Tìm j

1

1

4

2

6

x=1

5

8

i=1

j=2

l=0
Tìm j


7

r=7

7

r=7

4

2

6

x=1

5
i = 1, j = 1

8

7

3

3

r=7

4


2

6

3
8


GIẢI THUẬT SẮP XẾP
PHƯƠNG PHÁP QUICK SORT
chia dãy
con

l=0
r=0

l=1

1

5

x=1

8

7

r=7


4

2

6

3

i=1

j=0
l=0
r=0
Xếp dãy trái
Xếp dãy phải

Tìm i

1
l=1

5
i=1

x=4

8

7


4

r=7

2

6

3
9


GIẢI THUẬT SẮP XẾP
PHƯƠNG PHÁP QUICK SORT
l=1
Tìm j

5

x=4

8

7

i=1
l=1
Tìm i


3

4

r=7

2

x=4

8

7

4

2

6

x=4

8
i=2

5

j=6

l=1


3

3
j=7
r=7

i=2

Tìm j

6

7

4

r=7

2

6
j=6

5
10


GIẢI THUẬT SẮP XẾP
PHƯƠNG PHÁP QUICK SORT

l=1
Tìm j

3

x=4

8

7

4

i=2

3

3

6

x=4

2

7

4

i=3


j=4
x=4

l=1
Tìm j

2

2

5

j=5

l=1
Tìm i

r=7

4

7

i=3

j=4

r=7


8

6

5
r=7

8

6

5
11


GIẢI THUẬT SẮP XẾP
PHƯƠNG PHÁP QUICK SORT
l=1
chia dãy
con

xếp dãy
trái

Tìm i

r=3

l=4


2

4

7
i=4

l=1

x=2

j=3
r=3

3

2

4

l=1

x=2

r=3

3

2


4

3

i=1

r=7

8

6

5

j=3
12


GIẢI THUẬT SẮP XẾP
PHƯƠNG PHÁP QUICK SORT
Tìm j

l=1

x=2

r=3

3


2

4

i=1
l=1 x=2
Tìm j

3

2

j=3
r=3

4

i=1 j=2
l=1 l=2 r=3
r=1
chia dãy
con

2

3

j=1

i=2


4
13


GIẢI THUẬT SẮP XẾP
PHƯƠNG
PHÁP
QUICK
SORT
l=1
xếp dãy
trái

xếp dãy
phải

Tìm i

r=1

2
l=2
x=3

r=3

3

4


l=2
x=3

r=3

3

4

i=2

14


GIẢI THUẬT SẮP XẾP
PHƯƠNG PHÁP QUICK SORT
Tìm j

Tìm j

l=2
x=3

r=3

3

4


i=2

j=3

l=2
x=3

r=3

3

4

i=2
j=3

15


GIẢI THUẬT SẮP XẾP
PHƯƠNG PHÁP QUICK SORT
chia dãy
con
j=1

Xếp dãy
phải

Xếp dãy
phải


l=2

r=3

3

4
i=3
l=3
r=3

4
l=4

x=8

7

8

r=7

6

5
16


GIẢI THUẬT SẮP XẾP

PHƯƠNG PHÁP QUICK SORT
Tìm i

l=4

x=8

7

8

r=7

6

i=4
l=4 x=8
Tìm i

Tìm j

7

8

l=4

i=5
x=8


7

8
i=5

5
j=7
r=7

6

5
j=7
r=7

6

5
j=7

17


GIẢI THUẬT SẮP XẾP
PHƯƠNG PHÁP QUICK SORT
Tìm i

l=4

x=8


7

5

r=7

6

8

i=6
j=6

Tìm i

l=4

x=8

7

5

r=7

6

8


j=6 i=7

Tìm j

l=4

x=8

7

5

r=7

6

8

j=6 i=7

18


GIẢI THUẬT SẮP XẾP
PHƯƠNG PHÁP QUICK SORTl = 7
l=4

Chia dãy
con


7

r=6

5

6

r=7

8

j=6 i=7

l=4
Xếp dãy
trái

7
l=4

Tìm i

7
i=4

x=5 r=6

5


6

x=5 r=6

5

6
19


GIẢI THUẬT SẮP XẾP
PHƯƠNG PHÁP QUICK SORT
l=4
Tìm i

7

x=5 r=6

5

6

i=4

l=4
Tìm j

7
i=4

l=4

Tìm j

x=5 r=6

5

6

j=6
x=5 r=6

7

5

i=4

j=5

6
20


GIẢI THUẬT SẮP XẾP
PHƯƠNG PHÁP QUICK SORT
Chia dãy
con


l=4
r=4

l=5

r=6

5

7

6

j=4

i=5

l=4
r=4
Xếp dãy
trái

Xếp dãy
phải

5
l=5
x=7

r=6


7

6

i=5

21


GIẢI THUẬT SẮP XẾP
PHƯƠNG PHÁP QUICK SORT
Tìm i

l=5
x=7

r=6

7

6

i=5
l=5
r=6
x=7
Tìm j

7


6

i=5 j=6
l=5 l=6
r=5 r=6

Chia dãy
con

6

7

22


GIẢI THUẬT SẮP XẾP
PHƯƠNG PHÁP QUICK SORT
l=5
r=5
Xếp dãy
trái

6
l=6
r=6

Xếp dãy
phải


7
l=7
r=7

Xếp dãy
phải

8
23


GIẢI THUẬT SẮP XẾP
PHƯƠNG PHÁP QUICK SORT
* Đánh giá: Theo phép so sánh
- Trường hợp tốt nhất: O(nlogn)
- Trường hợp trung bình:O(nlogn)
- Trường hợp xấu nhất: O(n2)

24


GIẢI THUẬT SẮP XẾP
PHƯƠNG PHÁP QUICK SORT
* Nhận xét:
- Việc lựa chọn phần tử chốt ảnh hưởng đến chí phí thực
hiện thuật toán. Phần tử chốt tốt nhất nếu nó là phần tử
trung vị (median) của dãy và xấu nhất nếu nó là phần tử
lớn nhất hoặc nhỏ nhất của dãy. Phần tử trung vị là
phần tử có giá trị lớn một nửa số phần tử của dãy chứa

nó.
- Để hạn chế khả năng xảy ra trường hợp xấu nhất, có thể
chọn tùy ý 3 hoặc 5 giá trị, sau đó chọn median của các
giá trị này.
25


×