Saturday, July 22, 2017 Cấu Trúc Dữ Liệu & Giải Thuật CN 2
BÀI TOÁN SẮP XẾP
0 1 2 3 … n-1
0 1 2 3 … n-1
Saturday, July 22, 2017 4
Cấu Trúc Dữ Liệu & Giải Thuật
CN
THỦ TỤC HOÁN ĐỔI 2 MẪU TIN
KHÔNG ĐÚNG THỨ TỰ
Bước 2 3 6 10 12 9 10 9 5
Bước 3 5 10 12 9 10 9 6
Bước 4 6 12 9 10 9 10
Bước 5 9 12 10 9 10
Bước 6 9 10 12 10
Bước 7 10 12 10
Bước 8 10 12
Kết quả 2 2 3 5 6 9 9 10 10 12
Đã sắp
0 1 2 3 … i-1 n-1
Bước 1 5 6
Bước 2 2 5 6
Bước 3 2 2 5 6
Bước 4 2 2 5 6 10
Bước 5 2 2 5 6 10 12
Bước 6 2 2 5 6 9 10 12
Bước 7 2 2 5 6 9 10 10 12
Bước 8 2 2 5 6 9 9 10 10 12
Bước 9 2 2 3 5 6 9 9 10 10 12
Saturday, July 22, 2017 Cấu Trúc Dữ Liệu & Giải Thuật CN 13
SẮP XẾP NỔI BỌT (BUBLE SORT)
0 1 2 3 … n-1
Khi có TT không
bình thuờng
đổi chổ (nổi bọt) 0 1 2 3 … n-1
Bước 2 2 5 6 3 9 10 12 9 10
Bước 3 3 5 6 9 9 10 12 10
Bước 4 5 6 9 9 10 10 12
Bước 5 6 9 9 10 10 12
Bước 6 9 9 10 10 12
Bước 7 9 10 10 12
Bước 8 10 10 12
Bước 9 10 12
Kết quả 2 2 3 5 6 9 9 10 10 12
Saturday, July 22, 2017 Cấu Trúc Dữ Liệu & Giải Thuật CN 18
SẮP XẾP NHANH (QUICK SORT) -
PHƯƠNG PHÁP PHÂN HOẠCH
Ðể phân hoạch mảng ta dùng 2 "con nháy" L và R
trong đó L từ bên trái và R từ bên phải.
Ta cho L chạy sang phải cho tới khi gặp phần tử có
khóa ≥ chốt
Cho R chạy sang trái cho tới khi gặp phần tử có
khóa < chốt.
Tại chỗ dừng của L và R nếu L < R thì hoán vị
a[L],a[R].
Lặp lại quá trình dịch sang phải, sang trái của 2
"con nháy" L và R cho đến khi L > R.
Khi đó L sẽ là điểm phân hoạch, cụ thể là a[L] là
phần tử đầu tiên của mảng con “bên phải”.
Saturday, July 22, 2017 Cấu Trúc Dữ Liệu & Giải Thuật CN 19
SẮP XẾP NHANH (QUICK SORT) -
PHƯƠNG PHÁP PHÂN HOẠCH
L=0 R=9
0 1 2 3 4 5 6 7 8 9
Chỉ số
5 8 2 10 5 12 8 1 15 4
Khoá
Chốt p = 8
Saturday, July 22, 2017 Cấu Trúc Dữ Liệu & Giải Thuật CN 20
SẮP XẾP NHANH (QUICK SORT) -
PHƯƠNG PHÁP PHÂN HOẠCH
L=1 R=9
0 1 2 3 4 5 6 7 8 9
Chỉ số
5 8 2 10 5 12 8 1 15 4
Khoá
Chốt p = 8
Saturday, July 22, 2017 Cấu Trúc Dữ Liệu & Giải Thuật CN 21
SẮP XẾP NHANH (QUICK SORT) -
PHƯƠNG PHÁP PHÂN HOẠCH
L=1 R=9
0 1 2 3 4 5 6 7 8 9
Chỉ số
5 4 2 10 5 12 8 1 15 8
Khoá
Chốt p = 8
Saturday, July 22, 2017 Cấu Trúc Dữ Liệu & Giải Thuật CN 22
SẮP XẾP NHANH (QUICK SORT) -
PHƯƠNG PHÁP PHÂN HOẠCH
L=2 R=9
0 1 2 3 4 5 6 7 8 9
Chỉ số
5 4 2 10 5 12 8 1 15 8
Khoá
Chốt p = 8
L=3 R=9
0 1 2 3 4 5 6 7 8 9
Chỉ số
5 4 2 10 5 12 8 1 15 8
Khoá
Chốt p = 8
Saturday, July 22, 2017 Cấu Trúc Dữ Liệu & Giải Thuật CN 24
SẮP XẾP NHANH (QUICK SORT) -
PHƯƠNG PHÁP PHÂN HOẠCH
L=3 R=8
0 1 2 3 4 5 6 7 8 9
Chỉ số
5 4 2 10 5 12 8 1 15 8
Khoá
Chốt p = 8
Saturday, July 22, 2017 Cấu Trúc Dữ Liệu & Giải Thuật CN 25
SẮP XẾP NHANH (QUICK SORT) -
PHƯƠNG PHÁP PHÂN HOẠCH
L=3 R=7
0 1 2 3 4 5 6 7 8 9
Chỉ số
5 4 2 10 5 12 8 1 15 8
Khoá
Chốt p = 8
Saturday, July 22, 2017 Cấu Trúc Dữ Liệu & Giải Thuật CN 26
SẮP XẾP NHANH (QUICK SORT) -
PHƯƠNG PHÁP PHÂN HOẠCH
L=3 R=7
0 1 2 3 4 5 6 7 8 9
Chỉ số
5 4 2 1 5 12 8 10 15 8
Khoá
Chốt p = 8
Saturday, July 22, 2017 Cấu Trúc Dữ Liệu & Giải Thuật CN 27
SẮP XẾP NHANH (QUICK SORT) -
PHƯƠNG PHÁP PHÂN HOẠCH
L=4 R=7
0 1 2 3 4 5 6 7 8 9
Chỉ số
5 4 2 1 5 12 8 10 15 8
Khoá
Chốt p = 8
Saturday, July 22, 2017 Cấu Trúc Dữ Liệu & Giải Thuật CN 28
SẮP XẾP NHANH (QUICK SORT) -
PHƯƠNG PHÁP PHÂN HOẠCH
L=5 R=7
0 1 2 3 4 5 6 7 8 9
Chỉ số
5 4 2 1 5 12 8 10 15 8
Khoá
Chốt p = 8
Saturday, July 22, 2017 Cấu Trúc Dữ Liệu & Giải Thuật CN 29
SẮP XẾP NHANH (QUICK SORT) -
PHƯƠNG PHÁP PHÂN HOẠCH
L=5 R=6
0 1 2 3 4 5 6 7 8 9
Chỉ số
5 4 2 1 5 12 8 10 15 8
Khoá
Chốt p = 8
Saturday, July 22, 2017 Cấu Trúc Dữ Liệu & Giải Thuật CN 30
SẮP XẾP NHANH (QUICK SORT) -
PHƯƠNG PHÁP PHÂN HOẠCH
L=5 R=5
0 1 2 3 4 5 6 7 8 9
Chỉ số
5 4 2 1 5 12 8 10 15 8
Khoá
Chốt p = 8
Saturday, July 22, 2017 Cấu Trúc Dữ Liệu & Giải Thuật CN 31
SẮP XẾP NHANH (QUICK SORT) -
PHƯƠNG PHÁP PHÂN HOẠCH
R=4 L=5
Chỉ 0 1 2 3 4 5 6 7 8 9
số
5 4 2 1 5 12 8 10 15 8
Khoá
Chốt p = 8
Phân hoạch
0 1 2 3 4 5 6 7 8 9
5 4 2 1 5 12 8 10 15 8
Saturday, July 22, 2017 Cấu Trúc Dữ Liệu & Giải Thuật CN 32
GIẢI THUẬT QUICK SORT
Saturday, July 22, 2017 Cấu Trúc Dữ Liệu & Giải Thuật CN 33
VÍ DỤ VỀ GIẢI THUẬT QUICK SORT
Chỉ số 0 1 2 3 4 5 6 7 8 9
Khoá 5 8 2 10 5 12 8 1 15 4
Chốt p = 8
5 4 2 1 5 12 8 10 15 8
Chốt p = 5
Saturday, July 22, 2017 Cấu Trúc Dữ Liệu & Giải Thuật CN 34
VÍ DỤ VỀ GIẢI THUẬT QUICK SORT
Chỉ số 0 1 2 3 4 5 6 7 8 9
Khoá 5 8 2 10 5 12 8 1 15 4
Chốt p = 8
5 4 2 1 5 12 8 10 15 8
1 5
Chốt p = 5
1 4 2 5 5
Chốt p = 4
Saturday, July 22, 2017 Cấu Trúc Dữ Liệu & Giải Thuật CN 35
VÍ DỤ VỀ GIẢI THUẬT QUICK SORT
Chỉ số 0 1 2 3 4 5 6 7 8 9
Khoá 5 8 2 10 5 12 8 1 15 4
Chốt p = 8
5 4 2 1 5 12 8 10 15 8
1 5
Chốt p = 5 Chốt p = 12
1 4 2 5 5
2 4
Chốt p = 4 xong
1 2 4
Chốt p = 2 xong
1 2
Saturday, July 22, 2017 Cấu Trúc Dữ Liệu & Giải Thuật CN 36
xong xong
VÍ DỤ VỀ GIẢI THUẬT QUICK SORT
Chỉ số 0 1 2 3 4 5 6 7 8 9
Khoá 5 8 2 10 5 12 8 1 15 4
Chốt p = 8
5 4 2 1 5 12 8 10 15 8
1 5 8 12
Chốt p = 5 Chốt p = 12
1 4 2 5 5 8 8 10 15 12
2 4
1 2
Saturday, July 22, 2017 Cấu Trúc Dữ Liệu & Giải Thuật CN 37
xong xong
VÍ DỤ VỀ GIẢI THUẬT QUICK SORT
Chỉ số 0 1 2 3 4 5 6 7 8 9
Khoá 5 8 2 10 5 12 8 1 15 4
Chốt p = 8
5 4 2 1 5 12 8 10 15 8
1 5 8 12
Chốt p = 5 Chốt p = 12
1 4 2 5 5 8 8 10 15 12
2 4 12 15
1 2
Saturday, July 22, 2017 Cấu Trúc Dữ Liệu & Giải Thuật CN 38
xong xong
CHƯƠNG TRÌNH SẮP XẾP QUICKSORT
//Không làm gì cả
if (k>j)
return -1;//không có chốt
else
if (a[k]>a[i])
return k;
else
return i;
}
Saturday, July 22, 2017 Cấu Trúc Dữ Liệu & Giải Thuật CN 39
CHƯƠNG TRÌNH SẮP XẾP QUICKSORT
int pivot=a[pivot_ind];
int k=partition(i,j,pivot);
QuickSort (i,k-1);
QuickSort (k,j);
}
}
Saturday, July 22, 2017 Cấu Trúc Dữ Liệu & Giải Thuật CN 41
HEAPSORT – ĐỊNH NGHĨA HEAP
Saturday, July 22, 2017 Cấu Trúc Dữ Liệu & Giải Thuật CN 42
HEAPSORT – Ý TƯỞNG GIẢI THUẬT
else
if ((a[r]>a[2*r+1]) &&
(a[2*r+1]<=a[2*r])){
swap(r,2*r+1);
r=2*r+1;
}
else r=last; //break;
};
Saturday, July 22, 2017 Cấu Trúc Dữ Liệu & Giải Thuật CN 46
CHƯƠNG TRÌNH SẮP XẾP HEAPSORT
void HeapSort(void){
int i;
/*1*/ for(i = (n-2)/2; i>=0; i--)
/*2*/ PushDown(i,n-1); Complexity
/*3*/ for(i = n-1; i>=2; i--) { Xấu nhất
/*4*/ Swap(&a[0],&a[i]); O(nlogn)
/*5*/ PushDown(0,i-1);
}
/*6*/ Swap(&a[0],&a[1]);
}
Saturday, July 22, 2017 Cấu Trúc Dữ Liệu & Giải Thuật CN 47
48