You are on page 1of 9

HƯỚNG DẪN CHẠY TAY

1. Inser onSort
12 7 11 9 2

B01:
current=1, walker=0, hold=7
7<12: swap(7,12)
7 12 11 9 2

B02:
current=2, walker=1, hold=11
11<12: swap(11,12)
7 11 12 9 2
current=2, walker=0, hold=11
11>7: no swap
7 11 12 9 2

B03:
curr=3, w=2, h=9
9<12: swap(9,12)
7 11 9 12 2
curr=3, w=1, h=9
9<11: swap(9,11)
7 9 11 12 2
Curr=3, w=0, h=9
9>7: no swap

B04:
curr=4, w=3, h=2
2<12: swap(2,12)
7 9 11 2 12
curr=4, w=2, h=2
2<11: swap(2,11)
7 9 2 11 12
curr=4, w=1, h=2
2<9: swap(2,9)
7 2 9 11 12
curr=4, w=0, h=2
2<7: swap(2,7)
2 7 9 11 12

end Inser onSort


2. Selec onSort
12 7 11 9 2

B01:
curr=0, w=1, smallest=12
w=1 -> 4: min=2
2<12: exchance(12,2)
2 7 11 9 12

B02:
curr=1, w=2, smallest=7
w=2 -> 4: min=9
9>7: no exchance
2 7 11 9 12

B03:
curr=2, w=3, smallest=11
w=3 -> 4: min=9
9<11: exchance(11,9)
2 7 9 11 12

B04:
curr=3, w=4, smallest=11
w=4: min=12
12>11: no exchance
2 7 9 11 12

B05:
curr=4, smallest=12
no exchance
2 7 9 11 12

end Selec onSort


3. BubleSort
6 1 3 5 8

Pass 01: Pass 02: Pass 03: Pass 04:


c= 0, w=4, s=T c=1, w=4, s=T c=2, w=4, s=T c=3, w=4, s=T
..... ... ... no swap
c=0, w=1 c=1, w=2 c=2, w=3 ....
1<6: swap(6,1) -> s=F 3<6: swap(3,6) -> s=F 5<6: swap(5,6) -> s=F c=3, w=3, s=T
1 6 3 5 8 1 3 6 5 8 1 3 5 6 8 no swap
c=0, w=0, s=F c=1, w=1, s=F c=2, w2, s=F

Pass 05:
c=4, w=4, s=T
no swap
end BubleSort
4. QuickSort
10 15 1 2 6 12 5 7

Lưu ý: tùy theo việc chọn pivot ở vị trí đầu/giữa/cuối mà việc chạy tay sẽ có sự thay đổi thứ tự các phần
tử ở các bước.

1. Chọn pivot ở cuối danh sách.


2. Di chuyển các phần tử nhỏ hơn pivot về đầu danh sách.
3. Khi không còn phần tử nhỏ hơn pivot, di chuyển pivot vào vị trí mới sao cho tất cả phần tử phía bên
trái bé hơn pivot và tất cả phần tử phía bên phải lớn hơn pivot.
* Trường hợp pivot = min/max, ta thay đổi pivot với phần tử ở vị trí đầu/cuối danh sách
4. Tách danh sách trái và phải, lặp lại việc chọn pivot cho danh sách trái và phải.

B01: chọn pivot = 7


1<7: swap(1, 10)
1 15 10 2 6 12 5 7
2<7: swap(2, 15)
1 2 10 15 6 12 5 7
6<7: swap(6, 10)
1 2 6 15 10 12 5 7
5<7: swap(5, 15)
1 2 6 5 10 12 15 7
Không còn phần tử bé hơn pivot, dịch chuyển pivot: swap(7, 10)
1 2 6 5 7 12 15 10

B02: chọn pivot le = 5, pivot right = 10


1 2 6 5 7 12 15 10

1 2 6 5 7 12 15 10

Không còn phần tử bé hơn pivot le , dịch chuyển pivot le : swap(5, 6)


Không còn phần tử bé hơn pivot right, dịch chuyển pivot right: swap(10, 12)

1 2 5 6 7 10 15 12

B03:
a) Tách danh sách trái
1 2 5 6

1 2 5 6
Chọn pivot le = 2, 1<2 : no swap, kết thúc.

b) Tách danh sách phải


10 00 15 12
Chọn pivot right = 12, 12<15: swap(12, 15), kết thúc.
10 00 12 15
Hoàn thành thuật toán.

Biểu diễn các bước ở dạng cấu trúc cây:


5. HeapSort
1 3 5 4 6 13 10 9 8 15 17

1. Tạo cấu trúc cây nhị phân từ các phần tử trong danh sách
2. Bắt đầu tạo cây Max Heap từ cây nhị phân
2.1. Đi từ level thấp nhất của cây
2.2. Duyệt từ phần tử cuối cùng thuộc nhánh.
2.2. Ưu ên giải quyết nhánh liên quan node trước, sau đó mới chuyển nhánh khác cùng level.
2.3. Duyệt hết cùng level, ếp tục từ 2.2
3. Hoán đổi root và leaf cuối cùng trong cây
4. Remove node ở vị trí cuối ra khỏi cây và đặt vào cuối danh sách
5. Bắt đầu lại bước 2 cho đến khi duyệt hết các phần tử

Tạo binary tree

Heapify tạo Heap Max

swap(17,1)
remove 17

heapify
1 15 13 9 6 5 10 4 8 3 17

swap(15, 3)
remove 15

3 9 13 8 6 5 10 4 1 15 17
heapify

swap(13,1)
remove 13

1 9 10 8 6 5 3 4 13 15 17 heapify

swap(10, 4)
remove 10

4 9 5 8 6 1 3 10 13 15 17

heapify

swap(9, 3)
remove 9

3 8 5 4 6 1 9 10 13 15 17
heapify

swap(8, 1)
remove 8

1 6 5 4 3 8 9 10 13 15 17

heapify

swap(6, 3)
remove 6

3 4 5 1 6 8 9 10 13 15 17
heapify

swap(5, 1)
remove 5

1 4 3 5 6 8 9 10 13 15 17
heapify

swap(4, 3)
remove 4

3 1 4 5 6 8 9 10 13 15 17
swap(3, 1)
remove 3

1 3 4 5 6 8 9 10 13 15 17

You might also like