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 (168.35 KB, 7 trang )
<span class='text_page_counter'>(1)</span><div class='page_container' data-page=1>
71
© Dương Thành Phết-www.thayphet.net
<b> Minh Họa</b>
Cho dãy có 8 phần tử Sắp xếp theo vi trí tăng dần
<b>1</b> <b>2</b> <b>3</b> <b>5</b> <b>7</b> <b>9</b> <b>10</b> <b>15</b>
<b>ðoạn cần </b>
<b>sắp xếp</b>
<b>i=1; j=3</b>
<b>L</b> <b>X=2</b> <b>R</b>
<b>L=1</b>
<b>R=3</b>
Khoa CNTT Trường Cð CNTT TP.HCM
72
© Dương Thành Phết-www.thayphet.net
<b> Minh Họa</b>
Cho dãy có 8 phần tử Sắp xếp theo vi trí tăng dần
<b>1</b> <b>2</b> <b>3</b> <b>5</b> <b>7</b> <b>9</b> <b>10</b> <b>15</b>
<b>ðoạn cần </b>
<b>sắp xếp</b>
<b>Không cịn đoạn </b>
<b>nào cần sắp xếp</b>
Khoa CNTT Trường Cð CNTT TP.HCM
73
© Dương Thành Phết-www.thayphet.net Khoa CNTT Trường Cð CNTT TP.HCM
<b>10</b> <b>5</b> <b>7</b> <b>3</b> <b>9</b> <b>2</b> <b>15</b> <b>1</b>
<b>7</b> <b>9</b> <b>5</b> <b>15</b> <b>10</b>
<b>9</b> <b>7</b> <b>15</b> <b>10</b>
<b>9</b> <b>10</b> <b>15</b>
<b>9</b> <b>10</b>
<b>5</b> <b>7</b>
<b>1</b> <b>2</b> <b>3</b>
<b>ðoạn [1- 8]</b>
<b>ðoạn [4- 8]</b>
<b>ðoạn [5- 8]</b>
<b>ðoạn [6- 8]</b>
<b>ðoạn [6- 7]</b>
<b>ðoạn [4- 5]</b>
<b>ðoạn [1- 3]</b>
74
© Dương Thành Phết-www.thayphet.net
<b> Giải thuật:</b>
<b>Bước 1:</b>
<b>i=1;</b>
<b>Bước 2:</b>
j=N;
Trong khi (j>i) thực hiện:
Nếu a[j]<a[j-1]: Hoán vị a[j] và a[j-1]
<b>Bước 3:</b>
i=i+1;
Nếu i>N-1: Hết dãy, dừng
Ngược lại: Lặp lại Bước 2
Khoa CNTT Trường Cð CNTT TP.HCM
75
© Dương Thành Phết-www.thayphet.net
<b>Cài ðặt</b> <b>void QuickSort(int M[], int First, int Last)</b>{
int i, j, tam, x;
x = M[(First+Last)/2]; i = First; j = Last;
do {
while (M[i] <x) i++;
while (M[j] > X) j--;
if (i <= j)
{
tam=M[i];
M[i]=M[j];
M[j]=tam;
}while (i<= i);
QuickSort(M, First, j);
QuickSort (M, i, Last);
}
Khoa CNTT Trường Cð CNTT TP.HCM
76
© Dương Thành Phết-www.thayphet.net
<b> đánh giá giải thuật:</b>
+ Trường hợp tốt nhất, khi mảng M có thứ tự tăng:
Số phép gán: Gmin = N-1
Số phép so sánh: Smin = N×Log2(N)/2
Số phép hốn vị: Hmin = 0
+ Trường hợp xấu nhất, khi phần tử X ñược chọn
ở giữa dãy con là giá trị lớn nhất:
Số phép gán: Gmax = N×(N-1)/2
Số phép so sánh: Smax = (N-1)×(N-1)
Số phép hốn vị: Hmax = N×(N-1)/2
Số phép gán: Gavg = (N-1)×(N+2)/4
Số phép so sánh: Savg = N×[Log2(N)+2N–2]/4
Số phép hốn vị: Havg = N×(N-1)/4
Khoa CNTT Trường Cð CNTT TP.HCM
77
© Dương Thành Phết-www.thayphet.net
Chi phí trung bình O(n*log2n)
Chi phí cho trường hợp xấu nhất O(n2<sub>)</sub>
Chi phí này phụ thuộc vào cách chọn phần tử trục:
- Nếu chọn được phần tử có giá trị trung bình ta
sẽ chia thành 2 dãy bằng nhau
- Nếu chọn nhằm phần tử nhỏ nhất (hay lớn
nhất) <sub> O(n</sub>2<sub>)</sub>
Khoa CNTT Trường Cð CNTT TP.HCM