1. Trang chủ
  2. » Mẫu Slide

Bài giảng Cấu trúc dữ liệu và giải thuật: Sắp xếp - Phan Mạnh Hiển (2020)

10 15 0

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Nội dung

Sắp xếp nổi bọt (bubble sort).[r]

(1)

Sắp xếp

(Sorting)

Nguyễn Mạnh Hiển

(2)

Nội dung

1 Sắp xếp chọn Sắp xếp bọt Sắp xếp chèn

4 Sắp xếp vun đống Sắp xếp trộn

(3)(4)

Sắp xếp chọn

• Dãy A gồm n phần tử a0, a1, …, an-1

• Mỗi bước xét danh sách chưa xếp (unsorted sublist - USL)

• Có n-1 bước:

− Bước 0: USL0 = {a0, a1, …, an-1} − Bước 1: USL1 = {a1, …, an-1}

(5)

Sắp xếp chọn (tiếp)

• Mỗi bước:

− Tìm phần tử nhỏ amin USL

− Đổi chỗ amin phần tử USL

(6)

Ví dụ xếp chọn

• Ban đầu: 64, 25, 12, 22, 11 (11  64) • Sau bước 0: 11, 25, 12, 22, 64 (12  25) • Sau bước 1: 11, 12, 25, 22, 64 (22  25) • Sau bước 2: 11, 12, 22, 25, 64 (25  25) • Sau bước 3: 11, 12, 22, 25, 64

(7)

Cài đặt xếp chọn

template <typename T>

void selectionSort(vector<T> & a) {

for (int i = 0; i < a.size() - 1; i++) { int vt = i; // vị trí

for (int j = i + 1; j < a.size(); j++) if (a[vt] > a[j])

vt = j; // cập nhật vị trí

if (vt != i) { // đổi chỗ phần tử đầu USL T tg = a[vt];

a[vt] = a[i]; a[i] = tg; }

(8)

Phân tích xếp chọn

• Đếm số phép so sánh a[vt] > a[j]

• Vịng for bên lặp với j từ i+1 đến n-1, tức có n-1-i phép so sánh

• Vịng for bên ngồi lặp với i từ đến n-2 𝑡 𝑛 = 𝑛 − − 𝑖

𝑛−2

𝑖=0

= 𝑛 − + 𝑛 − + ⋯ + = 𝑛 𝑛 −

2 = 𝑂(𝑛

(9)(10)

Sắp xếp bọt

• Mỗi bước duyệt qua phần tử a0, a1, …, ak • Tại phần tử ai (i < k):

− So sánh ai với ai+1

− Đổi chỗ chúng chưa thứ tự

Ngày đăng: 11/03/2021, 07:26

w