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

Cấu trúc dữ liệu và giải thuật chương 2 2 giải thuật sắp xếp

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 (1.75 MB, 110 trang )

Chương 2.2. Giải thuật sắp xếp

1


*
*

Nắm vững, minh họa và tính toán được các
phép gán (hoán vị) các giải thuật sắp xếp cơ
bản trên mảng một chiều
Cài đặt được các giải thuật bằng ngôn ngữ
C/C++

2


* Sắp xếp là quá trình xử lý một danh sách các phần tử

*

(hoặc các mẫu tin) để đặt chúng theo một thứ tự thỏa
mãn một tiêu chuẩn nào đó dựa trên nội dung thông
tin lưu giữ tại mỗi phần tử.
Khái niệm nghịch thế
a1

a2

a3


a4





aN-2 aN-1 aN

Giả sử xét mảng có thứ tự tăng dần, nếu có iai>aj thì ta gọi đó là nghịch thế.
Mục tiêu của sắp xếp là khử các nghịch thế (bằng
cách hoán vị)
3


*Đổi chổ trực tiếp – Interchange Sort
*Chọn trực tiếp – Selection Sort
*Chèn trực tiếp – Insertion Sort
*Quick Sort
*Nổi bọt – Buble Sort
*Một số giải thuật khác đọc thêm trong tài liệu
4


*Ý tưởng
Ý tưởng chính của giải thuật là xuất phát từ đầu
dãy, tìm tất cả nghịch thế chứa phần tử này,
triệt tiêu chúng bằng cách đổi chỗ phần tử này
với phần tử tương ứng trong cặp nghịch thế.
Lặp lại xử lý trên với các phần tử tiếp theo

trong dãy.
5


Giả sử cần sắp xếp dãy số sau tăng dần

1

2

3

4

5

6

7

8
6


Bước 1: Xét phần tử đầu tiên (tại vị trí 1)

1
i

2

j

3

4

5

6

7

8
7


Bước 1: Xét phần tử đầu tiên (tại vị trí 1)

1
i

2
j

3

4

5


6

7

8
8


Bước 1: Xét phần tử đầu tiên (tại vị trí 1)

1
i

2

3
j

4

5

6

7

8
9



Bước 1: Xét phần tử đầu tiên (tại vị trí 1)

1
i

2

3

4
j

5

6

7

8
10


Bước 1: Xét phần tử đầu tiên (tại vị trí 1)

1
i

2

3


4

5
j

6

7

8
11


Bước 1: Xét phần tử đầu tiên (tại vị trí 1)

1
i

2

3

4

5

6
j


7

8
12


Bước 1: Xét phần tử đầu tiên (tại vị trí 1)

1
i

2

3

4

5

6

7
j

8
13


Bước 1: Xét phần tử đầu tiên (tại vị trí 1)
Kết thúc

bước 1

1
i

2

3

4

5

6

7

8
j

14


Bước 2: Xét phần tử thứ hai (tại vị trí 2)

1
i

2


3
j

4

5

6

7

8
15


Bước 2: Xét phần tử thứ hai (tại vị trí 2)

1

2
i

3
j

4

5

6


7

8
16


Bước 2: Xét phần tử thứ hai (tại vị trí 2)

1

2
i

3

4
j

5

6

7

8
17


Bước 2: Xét phần tử thứ hai (tại vị trí 2)


1

2
i

3

4

5
j

6

7

8
18


Bước 2: Xét phần tử thứ hai (tại vị trí 2)

1

2
i

3


4

5

6
j

7

8
19


Bước 2: Xét phần tử thứ hai (tại vị trí 2)

1

2
i

3

4

5

6

7
j


8
20


Bước 2: Xét phần tử thứ hai (tại vị trí 2)
Kết thúc
bước 2

1

2
i

3

4

5

6

7

8
j

21



Bước 3: Xét phần tử thứ ba (tại vị trí 3)

1

2
i

3

4
j

5

6

7

8
22


Bước 3: Xét phần tử thứ ba (tại vị trí 3)

1

2

3
i


4
j

5

6

7

8
23


Bước 3: Xét phần tử thứ ba (tại vị trí 3)

1

2

3
i

4

5
j

6


7

8
24


Bước 3: Xét phần tử thứ ba (tại vị trí 3)

1

2

3
i

4

5

6
j

7

8
25


×