Interchange Sort – Đổi chỗ trực tiếp.. Binary Insertion Sort – Chèn nhị phân... Đổi chỗ trực tiếp Interchange Sort Đổi chỗ trực tiếp Interchange SortĐổi chỗ trực tiếp Interchange Sort Ng
Trang 1CẤU TRÚC DỮ LIỆU VÀ GIẢI
THUẬT
Data Structures & Algorithms
SẮP XẾP
Nội dung
1 Bài toán sắp xếp
2 Tổng quan các phương pháp sắp xếp nội
3 Interchange Sort – Đổi chỗ trực tiếp
4 Selection Sort – Chọn trực tiếp
5 Bobble Sort – Nổi bọt
6 Shaker Sort - Nổi bọt cải tiến
7 Insertion Sort – Chèn trực tiếp
8 Binary Insertion Sort – Chèn nhị phân
Trang 2Đổi chỗ trực tiếp (Interchange Sort) Đổi chỗ trực tiếp (Interchange Sort)
Đổi chỗ trực tiếp (Interchange Sort)
Nghịch thế
Đổi chỗ trực tiếp (Interchange Sort)
Trang 3Interchange Sort – Độ Phức Tạp
12
0
1
i
j
Interchange Sort – Minh Họa
Interchange Sort – Minh Họa
1
0
2
0
i
j
Interchange Sort – Minh Họa
1
0
4
0
i
j
Interchange Sort – Minh Họa
1
0
5
0
i
j
Interchange Sort – Minh Họa
1
1
Trang 4• Cho dãy số a:
j=1
i=0
i=1 j=2
i=1 j=3
i=1 j=4
i=2 j=4
i=3 j=5
i=5 j=6 i=4 j=6 i=4 j=5
i=6 j=7
Trang 5Interchange Sort – Bài Tập
Cho biết kết quả theo từng bước khi áp dụng thuật toán
Interchange Sort sắp xếp dãy sau theo chiều tăng dần
45, 7, 12, 33, 21, 5, 2, 57, 15,
Selection Sort – Chọn trực tiếp
Trang 6Selection Sort Selection Sort – Minh Họa
12
i
0
Vị trí nhỏ nhất(0,7) Swap(a[0], a[4])
Selection Sort – Minh Họa
1
i
min
0
Vị trí nhỏ nhất(1,7) Swap(a[1], a[1])
Selection Sort – Minh Họa
1
i
min
0
Vị trí nhỏ nhất(2,7) Swap(a[2], a[6])
Selection Sort – Minh Họa
1
i
min
0
Vị trí nhỏ nhất(3, 7) Swap(a[3] , a[3])
Selection Sort – Minh Họa
1
i
min
0
Vị trí nhỏ nhất(4, 7) Swap(a[4], a[5])
Trang 7Selection Sort – Minh Họa
1
i
min
0
Vị trí nhỏ nhất(5,7) Swap(a[5], a[6])
Selection Sort – Minh Họa
1
i
min
0
Vị trí nhỏ nhất(6, 7)
• Cho dãy số a:
Selection Sort – Minh Họa
i=0
Selection Sort – Minh Họa
Trang 8i=2
i=3
i=4
Selection Sort – Minh Họa
i=6 i=5
Selection Sort – Minh Họa
Selection Sort– Bài Tập
Cho biết kết quả theo từng bước khi áp dụng thuật toán
Selection Sort sắp xếp dãy sau theo chiều tăng dần
45, 7, 12, 33, 21, 5, 2, 57, 15,
Bubble Sort – Nổi bọt
Bài toán: Hãy đẩy phần tử lớn từ cuối dãy lên đầu dãy
dựa vào việc so sánh các cặp kề nhau
Trang 9Xuất phát từ cuối dãy (hoăc đầu dãy), đổi chỗ các
cặp phần tử kế cận để đưa phần tử nhỏ hơn trong
cặp phần tử đó về vị trí đúng đầu dãy hiện hành, sau
đó sẽ không xét đến nó ở bước tiếp theo, do vậy ở
lần xử lý thứ i sẽ có vị trí đầu dãy là i
Lặp lại xử lý trên cho đến khi không còn cặp phần tử
nào để xét
Bubble Sort – Ý tưởng
Bubble Sort – Ý tưởng
51
Bubble Sort – Minh Họa
12
0
j
1
52
Bubble Sort – Minh họa
1
0
i
j
2
Bubble Sort – Minh họa
1
0
j
4
Bubble Sort – Minh họa
1
0
j
5
Trang 1055
Bubble Sort – Minh họa
1
0
i
j
6
56
Bubble Sort – Minh họa
1
0
i
j
8
57
Bubble Sort – Minh họa
1
1
i
j
15
12
{ int i, j;
for (i = 0 ; i<n-1 ; i++)
for (j =n-1; j >i ; j )
if (a[j]< a[j-1])// nếu sai vị trí thì đổi chỗ Swap(a[j], a[j-1]);
}
Bubble Sort – Cài đặt
• Cho dãy số a:
i=
0
i=
4
Bubble Sort – Ví dụ
i=0 j=1 i=0 j=2 i=0 j=3
Trang 11i=1 j=3
i=2 j=4
i=5 i=4 j=6 i=3 j=5
Bubble Sort– Độ Phức Tạp
Bubble Sort– Bài Tập
Cho biết kết quả theo từng bước khi áp dụng thuật toán
Bubble Sort sắp xếp dãy sau theo chiều tăng dần
45, 7, 12, 33, 21, 5, 2, 57, 15,
• Trong mỗi lần sắp xếp, duyệt mảng theo 2 lượt từ 2 phía khác nhau:
Lượt đi: đẩy phần tử nhỏ về đầu mảng
Lượt về: đẩy phần tử lớn về cuối mảng
Shaker Sort– Đặt vấn đề
Trang 12Shaker Sort– Thuật toán Shaker Sort– Thuật toán
Trang 13Shaker Sort – Ví dụ Shaker Sort – Ví dụ
Trang 14Insertion Sort– Chèn trực tiếp Insertion Sort– Chèn trực tiếp
Trang 15Insertion Sort– Chèn trực tiếp Insertion Sort– Chèn trực tiếp
12
0
Trang 16Insertion Sort – Minh Họa
12
i
x
0
pos
2
Insert a[1] into (0,0)
Insertion Sort – Minh Họa
2
i
x
0
pos
Insert a[2] into (0, 1)
8
Insertion Sort – Minh Họa
2
i
x
0
pos
Insert a[3] into (0, 2)
5
Insertion Sort – Minh Họa
2
i
x
0
pos
Insert a[4] into (0, 3)
1
Insertion Sort – Minh Họa
1
i
x
0
pos
Insert a[5] into (0, 4)
6
Insertion Sort – Minh Họa
1
i
x
0
pos
Insert a[6] into (0, 5)
4
Trang 17Insertion Sort – Minh Họa
1
i
x
0
pos
Insert a[8] into (0, 6)
15
Insertion Sort – Minh Họa
1
pos
0
i=1
i=2
Insertion Sort – Minh Họa
i=3
i=4
Insertion Sort – Minh Họa
i=6
Insertion Sort – Minh Họa
Trang 18Insertion Sort– Độ Phức Tạp Insertion Sort– Độ Phức Tạp
Insertion Sort– Bài Tập
Cho biết kết quả theo từng bước khi áp dụng thuật toán
Insertion Sort sắp xếp dãy sau theo chiều tăng dần
45, 7, 12, 33, 21, 5, 2, 57, 15,
Binary Insertion Sort– Chèn nhị phân
Insertion Sort chèn vào một dãy đã sắp xếp !
Tìm kiếm chỗ để chèn?
Cải tiến Insertion Sort bằng cách tìm vị trí cần chèn bằng thuật tìm kiếm nhị phân, sau đó thực hiện việc chèn !
{
int l,r,m,i;
int x;//lưu giá trị a[i] tránh bị ghi đè khi dời chỗ các phần tử
for(int i=1 ; i<n ; i++)
{ x = a[i]; l = 0; r = i-1;
while(<=r) // tìm vị trí chèn x
if(x < a[m]) r = m-1;
}
for(int j = i-1 ; j >=l ; j )
a[j+1] = a[j] ;// dời các phần tử sẽ đứng sau x
}
}
Binary Insertion Sort– Chèn nhị phân
108