ươ TÌM KI M & S P X P
2 ng Ắ
Ch Ế
Ế
2.1. Các gi
ậ
ả
ế
i thu t tìm ki m 2.1.1. Bài toán tìm ki mế i thu t tìm ki m tuy n tính 2.1.2. Gi ế i thu t Tìm ki m nh phân 2.1.3. Gi ế
ế ị
ậ ậ
2.2. Các gi
ả
ế
ọ
ả ả i thu t s p x p ậ ắ 2.2.1. Bài toán s p x p 3.2.1 Gi 3.2.2 Gi 3.2.3 Gi 3.2.4 Gi 3.2.5 Gi
i thu t đ i ch tr c ti p –Interchange Sort ổ ự ế i thu t ch n tr c ti p-Selection Sort ự ế i thu t chèn tr c ti p-Insert Sort ế ự i thu t n i b t – Bubble Sort i thu t nhanh – Quick Sort
ế ắ ậ ổ ậ ậ ậ ổ ọ ậ
ả ả ả ả ả
2.3. Bài t pậ
1
Khoa KTCN Tr
ng ĐH KTKT B.D ng
ườ
ươ
© D ng Thành Ph t-www.thayphet.net ế
ươ
2.1 Các Gi
i Thu t Tìm Ki m
ả
ế
ậ
2
Khoa KTCN Tr
ng ĐH KTKT B.D ng
ườ
ươ
© D ng Thành Ph t-www.thayphet.net ế
ươ
2.1.1. Bài toán tìm ki mế i thu t tìm ki m tuy n tính 2.1.2. Gi ế i thu t Tìm ki m nh phân 2.1.3. Gi ế ậ ậ ả ả ế ị
2.1.1 Bài Toán Tìm Ki mế
, khi thao tác, khai thác d li u h u nh ư ữ ệ ầ
lúc nào cũng ph i th c hi n thao tác tìm ki m. Trong th c t ự ế ả ự ệ ế
ể ệ ấ
ế ho c tìm th y. ả ủ ấ
K t qu c a vi c tìm ki m có th là không tìm th y ế ặ N u k t qu là tìm th y thì nhi u khi còn ph i xác ế ả
đâu? ế đ nh xem v trí c a ph n t ị ả ủ ầ ử ị ề ấ tìm th y là ở ấ
Vi c tìm ki m nhanh hay ch m tùy thu c vào tr ng ệ ậ ạ ộ
thái và tr t t c a d li u trên đó. ữ ệ ế ậ ự ủ
Có 2 thu t toán chính: Tìm ki m tuy n tính & Tìm ế ế ậ
3
Khoa KTCN Tr
ng ĐH KTKT B.D ng
ườ
ươ
© D ng Thành Ph t-www.thayphet.net ế
ươ
ki m nh phân ế ị
s chúng ta có m t m ng M g m N ph n t . ầ ử ả ộ ả ử ồ
có giá tr b ng ấ ầ ử ị ằ
có giá tr b ng X là ph n t ị ằ ử ế ầ ầ ử th ứ
4
Khoa KTCN Tr
ng ĐH KTKT B.D ng
ườ
ươ
© D ng Thành Ph t-www.thayphet.net ế
ươ
Gi V n đ đ t ra là có hay không ph n t ề ặ X trong m ng M? ả N u có thì ph n t m y trong m ng M? ấ ả
2.1.2. Gi
ả
i Thu t Tìm Ki m Tuy n Tính ế
ế
ậ
ng: ưở
ủ ứ ấ
ầ ử ứ c ph n t ượ ớ ặ ầ
Ý T th nh t, th hai…c a Ti n hành so sánh x v i ph n t ế có khóa c n tìm, m ng A cho đ n khi g p đ ầ ử ế ả ho c đã tìm h t m ng mà không th y x. ấ ả ế ặ
ể ậ
Ư ể Thu t toán này có th cho ta th c hi n tìm ki m khi các ph n t ệ ự c s p x p. ượ trong m ng ch a đ ả u đi m: ế ầ ử ư ế ắ
ượ c đi m: ể S m t r t nhi u th i gian n u nh ư ấ ấ ế ề ờ
5
Khoa KTCN Tr
ng ĐH KTKT B.D ng
ườ
ươ
© D ng Thành Ph t-www.thayphet.net ế
ươ
Nh không có ph n t chúng ta c n tìm. ẽ ầ ử ầ
VD:Tìm x = 14
Tìm th y ấ i v trí th t ứ ạ ị
Ch a ư h t ế m ngả
5
Minh H aọ
14
5
12 3
0 10 2
7
1 14 9 14
3
1
2
4
5
6
7
8
9
10
ế
VD:Tìm x = 30
H t m ng ả Ch a ư h t ế không tìm m ngả th yấ
30
5
12 3
7
1 14 9
0 10 2
3
1
2
10
4
5
6
7
8
9
6
Khoa KTCN Tr
ng ĐH KTKT B.D ng
ườ
ươ
© D ng Thành Ph t-www.thayphet.net ế
ươ
Gi i thu t: ả ậ
: B c 1 ướ
i = 1; // B t đ u t ph n t đ u tiên c a dãy ắ ầ ừ ầ ử ầ ủ
: So sánh a[i] v i x, có 2 kh năng. B c 2 ướ ả ớ
ấ
• a[i] = x ; // Tìm th y.D ng ừ • a[i] != x ; // Th c hi n b c 3. ướ ự ệ
: B c 3 ướ
k ti p trong m ng. ả
• i = i+1; // xét ph n t ầ ử ế ế • N u i > N // H t m ng.Không tìm th y.D ng ừ ế ế ấ ả
7
Khoa KTCN Tr
ng ĐH KTKT B.D ng
ườ
ươ
© D ng Thành Ph t-www.thayphet.net ế
ươ
Ng i: L p l i b c 2. c l ượ ạ ặ ạ ướ
Cài Đ tặ
Int Timtuyentinh (int a[] , int N , int x) {
int i = 0; while((i < N) && (a[i] != x)) i++; if( i == N)
return -1 ; // tìm h t m ng nh ng không có x ế ả ư
else
return i ; //a[i] là ph n t có khóa x. ầ ử
}
ả i thu t ậ
8
Khoa KTCN Tr
ng ĐH KTKT B.D ng
ườ
ươ
© D ng Thành Ph t-www.thayphet.net ế
ươ
Đ ph c t p tính toán c p n: T(n)=O(n) Đánh giá gi ộ ứ ậ ấ
2.1.3 Gi
i Thu t Tìm Ki m Nh Phân
ả
ế
ậ
ị
Ý T ng: ưở
ầ ủ ầ ử ầ
ố ế ế
đ ng ị ị ở ữ ầ ầ ử ớ đ u tiên c a dãy cu i cùng c a dãy (Last = N). ủ gi a ầ ử ứ
ế ạ
ủ ầ
ế ạ ắ
ủ
ặ ạ
ế ặ ạ
9
Khoa KTCN Tr
ng ĐH KTKT B.D ng
ườ
ươ
© D ng Thành Ph t-www.thayphet.net ế
ươ
- L n tìm ki m ban đ u là ph n t (First = 1) đ n ph n t - So sánh giá tr X v i giá tr ph n t c a dãy M là M[Mid]. ủ - N u X = M[Mid]: Tìm th y ế ấ - N u X < M[Mid]: Rút ng n ph m vi tìm ki m ắ ế v n a đ u c a dãy M (Last = Mid–1) ề ử - N u X > M[Mid]: Rút ng n ph m vi tìm ki m ế v n a sau c a dãy M (First = Mid+1) ề ử i quá trình này cho đ n khi tìm th y ph n t - L p l ầ ử ấ ế có giá tr X ho c ph m vi tìm ki m không còn n a ữ ị (First > Last).
ẽ ậ ắ ị
Ư ể Thu t toán tìm nh phân s rút ng n đáng u đi m: k th i gian tìm ki m. ể ờ ế
c đi m: ượ ể Ch th c hi n đ ỉ ự ệ ượ c trên dãy đã có th ứ
10
Khoa KTCN Tr
ng ĐH KTKT B.D ng
ườ
ươ
© D ng Thành Ph t-www.thayphet.net ế
ươ
Nh .ự t
Minh H aọ
Mid = 5 M[mid]= 46
M
F
L
Tìm giá tr X = 85 (Tìm th y) ấ ị
85
90
1 7
12 12
23 23
34 34
46 46
59 59
69 69
77 77
X
X > M[mid]
11
Khoa KTCN Tr
ng ĐH KTKT B.D ng
ườ
ươ
© D ng Thành Ph t-www.thayphet.net ế
ươ
Minh H aọ
Mid = 8 M[mid] = 77
F
M
L
Tìm giá tr X = 85 (Tìm th y) ấ ị
7
12
23
34
46
85
90
59 59
69 69
77 77
X
X > M[mid]
12
Khoa KTCN Tr
ng ĐH KTKT B.D ng
ườ
ươ
© D ng Thành Ph t-www.thayphet.net ế
ươ
Minh H aọ
Mid = 9 M[mid] = 85
M
L
F
Tìm giá tr X = 85 (Tìm th y) ấ ị
7
12
23
34
46
59
69
77
85
90
X
Đã tìm th y t i ấ ạ v trí 9 ị
X = M[mid]
13
Khoa KTCN Tr
ng ĐH KTKT B.D ng
ườ
ươ
© D ng Thành Ph t-www.thayphet.net ế
ươ
có khóa nh sau (N = 10). s dãy M g m 10 ph n t ồ ầ ử ư
Minh H aọ Gi ả ử 2 3 4 5 8 15 17 22 25 30
First Last
Mid M[Mid]
First>L ast
X= M[Mid]
X< M[Mid]
X> M[Mid]
L n ầ l pặ
False
5
1
10
True
False
False
8
B.đ uầ
1
False
2
1
4
False
False
True
3
2
False
3
3
4
False
False
True
4
3
False
4
4
4
True
5
14
Khoa KTCN Tr
ng ĐH KTKT B.D ng
ườ
ươ
© D ng Thành Ph t-www.thayphet.net ế
ươ
Tìm ki m ph n t có giá tr X = 5 (tìm th y): ầ ử ế ấ ị
Minh H aọ ả ử s dãy M g m 10 ph n t ồ có khóa nh sau (N=10). ư ầ ử
Gi 1 3 4 5 8 15 17 22 25 30
First Last
Mid M[Mid]
First> Last
X= M[Mid]
X< M[Mid]
X> M[Mid]
L n ầ l pặ
10
False
5
1
True
False
8
False
B.đ uầ
1
False
2
1
4
3
False
False
True
2
False
3
3
4
4
False
False
True
3
False
4
4
4
5
False
False
True
4
True
5
4
15
Khoa KTCN Tr
ng ĐH KTKT B.D ng
ườ
ươ
© D ng Thành Ph t-www.thayphet.net ế
ươ
Tìm ki m ph n t có giá tr X = 7 (không tìm th y) ầ ử ế ấ ị
B1: First = 1 B2: Last = N B3: IF (First > Last)
B3.1: Không tìm th yấ B3.2: Th c hi n Bkt ự
ệ
B4: Mid = (First + Last)/ 2 B5: IF (X = M[Mid])
i v trí Mid
ệ
B5.1: Tìm th y t ấ ạ ị B5.2: Th c hi n Bkt ự B6: IF (X < M[Mid])
i B3
B6.1: Last = Mid – 1 B6.2: L p l ặ ạ B7: IF (X > M[Mid])
i B3
B7.1: First = Mid + 1 B7.2: L p l ặ ạ
Bkt: K t thúc ế
16
Khoa KTCN Tr
ng ĐH KTKT B.D ng
ườ
ươ
© D ng Thành Ph t-www.thayphet.net ế
ươ
Gi i thu t: ả ậ
int Timnhiphan(int M[ ], int N, int X){
int First = 1; int Last = N; while (First <= Last){
int Mid = (First + Last)/2; if (X == M[Mid])
return Mid;
if (X < M[Mid])
Last = Mid – 1;
else
First = Mid + 1;
}
return -1;
Cài Đ tặ
ả i thu t ậ
} Đánh giá gi ộ
2n)
17
Khoa KTCN Tr
ng ĐH KTKT B.D ng
ườ
ươ
© D ng Thành Ph t-www.thayphet.net ế
ươ
Đ ph c t p tính toán c p n: T(n)=O(Log ứ ậ ấ
2.2 Các gi
ả
i thu t s p x p ậ ắ
ế
ế
ọ
18
Khoa KTCN Tr
ng ĐH KTKT B.D ng
ườ
ươ
© D ng Thành Ph t-www.thayphet.net ế
ươ
2.2.1. Bài toán s p x p 2.2.2. Gi 2.2.3. Gi 2.2.4. Gi 2.2.5. Gi 2.2.6. Gi i thu t đ i ch tr c ti p –Interchange Sort ổ ự ế i thu t ch n tr c ti p-Selection Sort ự ế i thu t chèn tr c ti p-Insert Sort ế ự i thu t n i b t – Bubble Sort i thu t nhanh – Quick Sort ắ ậ ổ ậ ậ ậ ổ ọ ậ ả ả ả ả ả
2.2.1. Bài Toán S p X p
ế
ắ
ả ậ ệ ờ
ệ ế
ữ ệ ặ
Đ thu n ti n và gi m thi u th i gian thao tác mà ể ể t là đ tìm ki m. Do v y s p x p d li u là m t đ c bi ộ ế ắ ậ ể ặ trong nh ng thao tác c n thi ng g p trong quá t và th ườ ế ữ trình l u tr , qu n lý d li u. ầ ữ ệ ữ ư ả
ế ử
ầ ử ộ tăng ho c gi m d a trên ả ự ặ ộ
S p x p là quá trình x lý m t danh sách các ph n t ắ đ đ t chúng theo m t th t ứ ự ể ặ n i dung l u tr trên m i ph n t ữ ộ . ầ ử ư ỗ
ề ế ắ
19
Khoa KTCN Tr
ng ĐH KTKT B.D ng
ườ
ươ
© D ng Thành Ph t-www.thayphet.net ế
ươ
Có r t nhi u thu t toán s p x p song chúng ta ch ỉ ậ ấ i thu t s p x p th quan tâm đ n 5 gi ng s d ng. ử ụ ậ ắ ườ ế ế ả
. . . . . . . . . .
a1
a2
a3
an-1
an
Khái ni m v ngh ch th : ế ề ệ ị
ả ử ả tăng d n, n u
ầ ế i
Gi s m ng có th t ngh ch th thì g i là ị ọ ứ ự ế
ụ ế ằ ử ắ ị
20
Khoa KTCN Tr
ng ĐH KTKT B.D ng
ườ
ươ
© D ng Thành Ph t-www.thayphet.net ế
ươ
M c tiêu c a s p x p là kh các ngh ch th (b ng ủ ế cách hoán v các ph n t ) ầ ử ị
i Thu t Đ i Ch Tr c Ti p-Interchange
ả
ậ ổ
ổ ự
ế
2.2.2. Gi Sort
Ý t ng: ưở
đ u dãy, tìm t t c ngh ch th ch a ừ ầ ấ ứ ế ả ị
này. Xu t phát t ấ ph n t ầ ử
Tri t tiêu chúng b ng cách đ i ch ph n t ằ ổ ỗ này v i ớ
t ệ ph n t ầ ử ươ ầ ử ng ng trong c p ngh ch th . ế ặ ứ ị
ti p theo trong ạ ử i x lý trên v i các ph n t ớ ầ ử ế
21
Khoa KTCN Tr
ng ĐH KTKT B.D ng
ườ
ươ
© D ng Thành Ph t-www.thayphet.net ế
ươ
L p l ặ dãy.
Minh H aọ
2
8
5
1
6
4
12
2
8
5
1
6
4
12
i=1
i=2 j=2
i=3 j=3
i=4 j=4
i=5 j=5
i=6 j=6
i=7 j=7
22
Khoa KTCN Tr
ng ĐH KTKT B.D ng
ườ
ươ
© D ng Thành Ph t-www.thayphet.net ế
ươ
12
2
8
5
1
6
4
Ban đ uầ
1
12
8
5
2
6
4
L n 1ầ
1
2
12
8
5
6
4
L n 2ầ
L n 3ầ
2
4
12
8
6
5
1
L n 4ầ
2
4
5
12
8
6
1
L n 5ầ
2
4
5
6
12
8
1
L n 6ầ
2
4
5
6
8
12
1
23
Khoa KTCN Tr
ng ĐH KTKT B.D ng
ườ
ươ
© D ng Thành Ph t-www.thayphet.net ế
ươ
Gi i thu t: ả ậ
B c ướ 1 :
i = 1; // b t đ u t đ u dãy ắ ầ ừ ầ
B c 2 : ướ
a[j] < a[i], j>i ầ ử
B c 3 ướ
ự ệ
j = i+1;//tìm các ph n t
:
Trong khi j < N th c hi n
N u a[j]
j = j+1;
B c 4 :
ướ i B c 2. 24 Khoa KTCN Tr ng ĐH KTKT B.D ng ườ ươ © D ng Thành Ph t-www.thayphet.net
ế ươ i = i+1;
N u i < n: L p l
ế
Ng ặ ạ ướ
i: D ng.
ừ c l
ượ ạ Cài Đ tặ void InterchangeSort(int a[], int N )
int
i, j,tam;
{
for (i = 0 ; i for (j =i+1; j < N ; j++) if(a[j ]< a[i]) {
tam=a[i];
a[i]=a[j];
a[j]=tam;
} 25 Khoa KTCN Tr ng ĐH KTKT B.D ng ườ ươ © D ng Thành Ph t-www.thayphet.net
ế ươ } Đánh giá gi i thu t: ả ậ i thu t đ i ch tr c ti p, s l ả ỗ ự ậ ổ
ả ố ượ
ộ ế
ụ ủ ạ ầ ố
ng phép hoán v th c hi n tùy thu c
ị ự ệ ộ 26 Khoa KTCN Tr ng ĐH KTKT B.D ng ườ ươ © D ng Thành Ph t-www.thayphet.net
ế ươ Ð i v i gi
ng các
ố ớ
phép so sánh x y ra không ph thu c vào tình
tr ng c a dãy s ban đ u
Nh ng s l
ố ượ
ư
vào k t q a so sánh
ế ủ Đ u tiên dãy có N ph n t ầ ử ầ ử nh
ỏ , ta ch n ph n t
ọ
đ u tiên. nh t trong dãy đ i ch cho ph n t
ổ ầ ử ầ ầ
ấ ổ
Ti p theo, tìm ph n t ấ ủ ế
còn l i trong dãy đ i ch cho ph n t nh nh t c a dãy n-1 ph n
ầ ử
th 2 c a
ổ ầ ử ứ ỏ
ổ ầ
ủ ạ t
ử
dãy. ự ả còn 1 ph n t Quá trình trên th c hiên đ n khi nào trong m ng ch
ỉ
ế
i.
ạ thi d ng l
ừ ầ ử 27 Khoa KTCN Tr ng ĐH KTKT B.D ng ườ ươ © D ng Thành Ph t-www.thayphet.net
ế ươ K t qu đ ả ượ ế c m ng đã s p x p tăng.
ắ ế ả Minh H aọ Cho dãy có 8 ph n t S p x p theo vi trí tăng d n ầ ử ắ ế ầ Min 16 11 45 28 73 61 7 23 I=1 28 Khoa KTCN Tr ng ĐH KTKT B.D ng ườ ươ © D ng Thành Ph t-www.thayphet.net
ế ươ 16 11 45 28 73 61 7 23 Minh H aọ Cho dãy có 8 ph n t S p x p theo vi trí tăng d n ầ ử ắ ế ầ Min 16 11 45 28 73 61 7 23 I=2 29 Khoa KTCN Tr ng ĐH KTKT B.D ng ườ ươ © D ng Thành Ph t-www.thayphet.net
ế ươ 7 11 45 28 73 61 16 23 Minh H aọ Cho dãy có 8 ph n t S p x p theo vi trí tăng d n ầ ử ắ ế ầ Min 16 11 45 28 73 61 7 23 I=3 30 Khoa KTCN Tr ng ĐH KTKT B.D ng ườ ươ © D ng Thành Ph t-www.thayphet.net
ế ươ 7 11 45 28 73 61 16 23 Minh H aọ Cho dãy có 8 ph n t S p x p theo vi trí tăng d n ầ ử ắ ế ầ Min 16 11 45 28 73 61 7 23 I=4 31 Khoa KTCN Tr ng ĐH KTKT B.D ng ườ ươ © D ng Thành Ph t-www.thayphet.net
ế ươ 7 11 16 28 73 61 45 23 Minh H aọ Cho dãy có 8 ph n t S p x p theo vi trí tăng d n ầ ử ắ ế ầ 16 11 45 28 73 61 7 23 I=5 32 Khoa KTCN Tr ng ĐH KTKT B.D ng ườ ươ © D ng Thành Ph t-www.thayphet.net
ế ươ 7 11 16 23 73 61 45 28 Minh H aọ Cho dãy có 8 ph n t S p x p theo vi trí tăng d n ầ ử ắ ế ầ Min 16 11 45 28 73 61 7 23 I=6 33 Khoa KTCN Tr ng ĐH KTKT B.D ng ườ ươ © D ng Thành Ph t-www.thayphet.net
ế ươ 73 7 11 16 23 28 61 45 Minh H aọ Cho dãy có 8 ph n t S p x p theo vi trí tăng d n ầ ử ắ ế ầ Min 16 11 45 28 73 61 7 23 I=7 34 Khoa KTCN Tr ng ĐH KTKT B.D ng ườ ươ © D ng Thành Ph t-www.thayphet.net
ế ươ 73 7 11 16 23 28 45 61 Minh H aọ Cho dãy có 8 ph n t S p x p theo vi trí tăng d n ầ ử ắ ế ầ K t thúc vì m ng
ả
ch còn 1 ph n t
ầ ử ế
ỉ 16 11 45 28 73 61 7 23 35 Khoa KTCN Tr ng ĐH KTKT B.D ng ườ ươ © D ng Thành Ph t-www.thayphet.net
ế ươ 73 7 11 16 23 28 45 61 Ban đ uầ L n 1ầ 16 11 45 28 73 61 7 23 L n 2ầ 7 11 45 28 73 61 16 23 7 11 45 28 73 61 16 23 L n 3ầ 7 11 16 28 73 61 45 23 L n 4ầ 7 11 16 23 73 61 45 28 L n 5ầ 7 11 16 23 28 61 45 73 L n 6ầ L n 7ầ 7 11 16 23 28 45 61 73 36 Khoa KTCN Tr ng ĐH KTKT B.D ng ườ ươ © D ng Thành Ph t-www.thayphet.net
ế ươ 7 11 16 23 28 45 61 73 Gi i thu t: ả ậ B c 1: ướ I = 1 B c 2: ướ ấ ỏ Tìm ph n t
hành t nh nh t a[min] trong dãy
ầ ử
a[i] đ n a[n]
ế
ừ Đ i ch cho a[min] và a[i] ổ hi n ệ
B c 3 :
ướ
ổ
B c 4 : ướ i b c 2 37 Khoa KTCN Tr ng ĐH KTKT B.D ng ườ ươ © D ng Thành Ph t-www.thayphet.net
ế ươ I = I + 1
N u I < N thì l p l
ế
Ng i thì d ng. c l
ượ ạ ậ ạ ướ
ừ Cài Đ tặ void SelectionSort(int a[], int n)
{ int min, i, j, tam;
for (i = 0; i < n - 1; i++) {
a[min] = a[i];
for (j = i + 1; j < n; j++)
if (a[j] < a[min]) a[min] =a[j]; tam=a[i];
a[i]=a[min];
a[min]=tam ;
} 38 Khoa KTCN Tr ng ĐH KTKT B.D ng ườ ươ © D ng Thành Ph t-www.thayphet.net
ế ươ } Đánh giá gi i thu t: ả ậ ậ ự ể ấ ằ ầ ả
t th i, bao gi
ử
ầ
ị ờ
nh nh t hi n hành. S l
ệ ấ ỏ ố ượ
ạ 39 Khoa KTCN Tr ng ĐH KTKT B.D ng ườ ươ © D ng Thành Ph t-www.thayphet.net
ế ươ Ð i v i gi
i thu t ch n tr c ti p, có th th y r ng
ố ớ
ế
ọ
l
cũng c n (n-i) l n so sánh đ
ở ượ
ứ
ể
ầ
ng
xác đ nh ph n t
phép so sánh này không ph thu c vào tình tr ng
c a dãy s ban đ u, do vây k t lu n:
ầ
ủ ụ
ế ộ
ậ ố ư ể
c s p x p, có đo n g m 1 ph n t
ồ ượ ế ắ ạ Cho dãy ban đ u ầ a1, a2, …, an, ta có th xem nh đã
ầ ử a1 đã đ ẽ c ượ Sau đó thêm a2 vào đo n ạ a1 s có đo n ạ a1 a2 đ s p x p.
ắ ế ể a3 vào đo n ạ a1 a2 đ có đo n ạ a1 a2 a3 Ti p t c thêm
c s p x p. đ ế ụ
ắ
ượ ế an vào đo n ạ a1 a2 … 40 Khoa KTCN Tr ng ĐH KTKT B.D ng ườ ươ © D ng Thành Ph t-www.thayphet.net
ế ươ c s p x p ế ụ
ẽ ượ ế Ti p t c cho đ n thêm khi xong
ế
a1 a2 ..an đ
ắ an-1 s có dãy Minh H aọ Cho dãy có 8 ph n t S p x p theo vi trí tăng d n ầ ử ắ ế ầ 41 Khoa KTCN Tr ng ĐH KTKT B.D ng ườ ươ © D ng Thành Ph t-www.thayphet.net
ế ươ Minh H aọ Cho dãy có 8 ph n t S p x p theo vi trí tăng d n ầ ử ắ ế ầ 42 Khoa KTCN Tr ng ĐH KTKT B.D ng ườ ươ © D ng Thành Ph t-www.thayphet.net
ế ươ Minh H aọ Cho dãy có 8 ph n t S p x p theo vi trí tăng d n ầ ử ắ ế ầ 43 Khoa KTCN Tr ng ĐH KTKT B.D ng ườ ươ © D ng Thành Ph t-www.thayphet.net
ế ươ Minh H aọ Cho dãy có 8 ph n t S p x p theo vi trí tăng d n ầ ử ắ ế ầ 44 Khoa KTCN Tr ng ĐH KTKT B.D ng ườ ươ © D ng Thành Ph t-www.thayphet.net
ế ươ Minh H aọ Cho dãy có 8 ph n t S p x p theo vi trí tăng d n ầ ử ắ ế ầ 45 Khoa KTCN Tr ng ĐH KTKT B.D ng ườ ươ © D ng Thành Ph t-www.thayphet.net
ế ươ Minh H aọ Cho dãy có 8 ph n t S p x p theo vi trí tăng d n ầ ử ắ ế ầ 46 Khoa KTCN Tr ng ĐH KTKT B.D ng ườ ươ © D ng Thành Ph t-www.thayphet.net
ế ươ Minh H aọ Cho dãy có 8 ph n t S p x p theo vi trí tăng d n ầ ử ắ ế ầ K t thúc ế 47 Khoa KTCN Tr ng ĐH KTKT B.D ng ườ ươ © D ng Thành Ph t-www.thayphet.net
ế ươ Ban đ uầ L n 1ầ L n 2ầ L n 3ầ L n 4ầ L n 5ầ L n 6ầ L n 7ầ 48 Khoa KTCN Tr ng ĐH KTKT B.D ng ườ ươ © D ng Thành Ph t-www.thayphet.net
ế ươ Gi i thu t: ả ậ c s p x p ắ ế ượ pos thích h p trong đo n a[1] đ n a[i-1] ế ạ ợ a[pos] đ n a[i-1] sang ph i m t ả ộ ế ử
ỗ ế ạ ượ c s p
ắ i b c 2 i=i+1;
N u i 49 Khoa KTCN Tr ng ĐH KTKT B.D ng ườ ươ © D ng Thành Ph t-www.thayphet.net
ế ươ Cài Đ tặ int pos, x;
for(int i=1 ; i ị x=a[i];
pos=i-1; // tìm v trí chèn x
while((pos >=0 )&&(a[pos]>=x)
{ a[pos+1]=a[pos];
pos--; }
a[pos+1]=x; //chèn x vào dãy } } 50 Khoa KTCN Tr ng ĐH KTKT B.D ng ườ ươ © D ng Thành Ph t-www.thayphet.net
ế ươ Đánh giá gi i thu t: ả ậ ả ặ ợ ị ầ ỗ ợ Các phép so sánh x y ra trong vòng l p while tìm
v trí thích h p pos, và m i l n xác đ nh v trí đang
ị
ỗ ầ
ị
xét không thích h p, s d i ch ph n t
a[pos]
ử
ẽ ờ
t
ươ ng ng.
ứ ệ ấ ả ặ ờ ủ ố 51 Khoa KTCN Tr ng ĐH KTKT B.D ng ườ ươ © D ng Thành Ph t-www.thayphet.net
ế ươ ỗ
ầ
ng h p sau: ạ
ng trong t ng tr Gi
i thu t th c hi n t
t c n – 1 vòng l p while,
ự
ậ
ả
ng phép so sánh và d i ch này ph
do s l
ụ
ố ượ
thu c vào tình tr ng c a dãy s ban đ u, nên ch
ộ
ỉ
c l
có
ướ ượ ườ ừ ợ 2.2.5. Gi i Thu t N i B t –Bubble Sort ả ổ ọ ậ Ý T ừ cu i dãy ,đ i ch các c p ph n t
ổ ặ ngưở :
Xu t phát t
ấ
ể ư k
ầ ử ế
đó v v trí đ ng đ u dãy hi n
ệ ố
ầ ử ổ
ề ị ứ ầ c n đ đ a ph n t
ậ
hành ế ế b
ở ướ
ị ứ ẽ ầ ph n ầ t ử
ế .
c s p x p
i x lý trên cho đ n khi k hông còn ph n t Sau đó s không xét đ n nó
Do v y
đ
ử ượ
L p l
ặ ế ầ ử 52 Khoa KTCN Tr ng ĐH KTKT B.D ng ườ ươ © D ng Thành Ph t-www.thayphet.net
ế ươ c ti p theo
ẽ
l n x lý th i s có v trí d u dãy là i
ậ ở ầ
ắ
ạ ử
.
nào đ xét
ể Minh H aọ Cho dãy có 8 ph n t S p x p theo vi trí tăng d n ầ ử ắ ế ầ 1 1 Ban đ uầ i 2 2 3 3 4 4 5 5 6 6 7 7 8 8 j 53 Khoa KTCN Tr ng ĐH KTKT B.D ng ườ ươ © D ng Thành Ph t-www.thayphet.net
ế ươ Minh H aọ 1 Cho dãy có 8 ph n t S p x p theo vi trí tăng d n ầ ử ắ ế ầ i 2 3 4 5 6 7 8 j 54 Khoa KTCN Tr ng ĐH KTKT B.D ng ườ ươ © D ng Thành Ph t-www.thayphet.net
ế ươ Minh H aọ 1 Cho dãy có 8 ph n t S p x p theo vi trí tăng d n ầ ử ắ ế ầ 2 i 3 4 5 6 7 8 j 55 Khoa KTCN Tr ng ĐH KTKT B.D ng ườ ươ © D ng Thành Ph t-www.thayphet.net
ế ươ Minh H aọ 1 Cho dãy có 8 ph n t S p x p theo vi trí tăng d n ầ ử ắ ế ầ 2 3 i 4 5 6 7 8 j 56 Khoa KTCN Tr ng ĐH KTKT B.D ng ườ ươ © D ng Thành Ph t-www.thayphet.net
ế ươ Minh H aọ 1 Cho dãy có 8 ph n t S p x p theo vi trí tăng d n ầ ử ắ ế ầ 2 3 4 i 5 6 7 8 j 57 Khoa KTCN Tr ng ĐH KTKT B.D ng ườ ươ © D ng Thành Ph t-www.thayphet.net
ế ươ Minh H aọ 1 Cho dãy có 8 ph n t S p x p theo vi trí tăng d n ầ ử ắ ế ầ 2 3 4 5 i 6 7 8 j 58 Khoa KTCN Tr ng ĐH KTKT B.D ng ườ ươ © D ng Thành Ph t-www.thayphet.net
ế ươ Minh H aọ 1 Cho dãy có 8 ph n t S p x p theo vi trí tăng d n ầ ử ắ ế ầ 2 3 4 5 6 i 7 8 j 59 Khoa KTCN Tr ng ĐH KTKT B.D ng ườ ươ © D ng Thành Ph t-www.thayphet.net
ế ươ Minh H aọ 1 1 1 1 1 1 1 1 Cho dãy có 8 ph n t S p x p theo vi trí tăng d n ầ ử ắ ế ầ 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 6 6 6 6 6 6 6 6 7 7 7 7 7 7 7 7 8 8 8 8 8 8 8 8 Ban đ uầ B c 1
ướ B c 2
ướ B c 3
ướ B c 4
ướ B c 5
ướ B c 6
ướ B c 7
ướ 60 Khoa KTCN Tr ng ĐH KTKT B.D ng ườ ươ © D ng Thành Ph t-www.thayphet.net
ế ươ Gi i thu t: ả ậ B c 1:
ướ B c 2
ướ i=1;
:
j=N;
Trong khi (j>i) th c hi n: ự ệ ịự
ọ
ế
ậ
i Thu t Ch n Tr c Ti p –Selection Sort
2.2.3 Gi
ả
Ý T
ng:
ưở
Min
i Thu t Chèn Tr c Ti p –Insert Sort
ự
ế
ậ
ả
ng:
2.2.4. Gi
Ý T
ưở
13
7
9
4
11
3
17
15
13
7
9
4
11
3
17
15
1 2 3 4 5 6 7 8
i=2
13
7
9
4
11
3
17
15
7
13
9
4
11
3
17
15
1 2 3 4 5 6 7 8
i=3
13
7
9
4
11
3
17
15
7
9
13
4
11
3
17
15
1 2 3 4 5 6 7 8
i=4
13
7
9
4
11
3
17
15
4
7
9
13
11
3
17
15
1 2 3 4 5 6 7 8
i=5
13
7
9
4
11
3
17
15
4
7
9
11
13
3
17
15
1 2 3 4 5 6 7 8
i=6
13
7
9
4
11
3
17
15
3
4
7
9
11
13
17
15
1 2 3 4 5 6 7 8
i=7
13
7
9
4
11
3
17
15
3
4
7
9
11
13
17
15
1 2 3 4 5 6 7 8
i=8
13
7
9
3
11
17
15
4
7
13
9
3
11
17
15
4
7
9
13
3
11
17
15
4
4
7
9
3
13
11
17
15
4
7
9
3
11
13
17
15
3
4
7
11
13
17
15
9
3
4
7
11
13
17
15
9
3
4
7
11
13
15
17
9
B c 1:
ướ
i=2; // a[1] đã đ
B c 2:
ướ
x=a[i];
Tìm v trí
ị
đ chèn a[i] vào
ể
B c 3:
ướ
D i ch ph n t
ầ
ỗ
ờ
v trí đ dành ch cho a[i]
ể
ị
B c 4:
ướ
a[pos]=x //đo n a[1] đ n a[i] đã đ
B c 5:
ướ
void InsertSort(int a[],int n)
{
11
11
5
5
7
7
3
3
9
9
2
2
15
15
1
1
1
11
5
7
3
9
2
15
1
2
11
5
7
3
9
15
1
2
3
11
5
7
9
15
1
2
3
5
11
7
9
15
1
2
3
5
7
11
9
15
1
2
3
5
7
9
11
K t ế
thúc
15
11
1
1
1
1
1
1
1
5
11
2
2
2
2
2
2
7
5
11
3
3
3
3
3
3
7
5
11
5
5
5
5
9
3
7
5
11
7
7
7
2
9
3
7
7
11
9
9
15
2
9
9
9
9
11
11
1
15
15
15
15
15
15
15