Chương TÌM KI M & S P X P 2.1 Các gi i thu t tìm ki m 2.1.1 Bài tốn tìm ki m 2.1.2 Gi i thu t tìm ki m n tính 2.1.3 Gi i thu t Tìm ki m nh phân 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 i thu t ñ i ch tr c ti p –Interchange Sort 3.2.2 Gi i thu t ch n tr c ti p-Selection Sort 3.2.3 Gi i thu t chèn tr c ti p-Insert Sort 3.2.4 Gi i thu t n i b t – Bubble Sort 3.2.5 Gi i thu t nhanh – Quick Sort 2.3 Bài t p © Dương Thành Ph t-www.thayphet.net Khoa CNTT Trư ng TC TÂY NAM Á 2.1 Các Gi i Thu t Tìm Ki m 2.1.1 Bài tốn tìm ki m 2.1.2 Gi i thu t tìm ki m n tính 2.1.3 Gi i thu t Tìm ki m nh phân © Dương Thành Ph t-www.thayphet.net Khoa CNTT Trư ng TC TÂY NAM Á 2.1.1 Bài Tốn Tìm Ki m Trong th c t , thao tác, khai thác d li u h u lúc ph i th c hi n thao tác tìm ki m K t qu c a vi c tìm ki m có th ho c tìm th y khơng tìm th y N u k t qu tìm th y nhi u cịn ph i xác đ nh xem v trí c a ph n t tìm th y đâu? Vi c tìm ki m nhanh hay ch m tùy thu c vào tr ng thái tr t t c a d li u Có thu t tốn chính: Tìm ki m n tính & Tìm ki m nh phân © Dương Thành Ph t-www.thayphet.net Khoa CNTT Trư ng TC TÂY NAM Á Gi s có m t m ng M g m N ph n t V n ñ ñ t có hay khơng ph n t có giá tr b ng X m ng M? N u có ph n t có giá tr b ng X ph n t th m y m ng M? © Dương Thành Ph t-www.thayphet.net Khoa CNTT Trư ng TC TÂY NAM Á 2.1.2 Gi i Thu t Tìm Ki m Tuy n Tính Ý Tư ng: Ti n hành so sánh x v i ph n t th nh t, th hai…c a m ng A cho ñ n g p ñư c ph n t có khóa c n tìm, ho c tìm h t m ng mà không th y x Ưu m: Thu t tốn có th cho ta th c hi n tìm ki m ph n t m ng chưa ñư c s p x p Như c ñi m: S m t r t nhi u th i gian n u ph n t c n tìm © Dương Thành Ph t-www.thayphet.net Khoa CNTT Trư ng TC TÂY NAM Á Minh H a VD:Tìm x = 14 Chưa h t m ng Tìm th y t i v trí th 14 12 14 10 7 10 VD:Tìm x = 30 30 12 14 10 7 H tChưa m ng h t khơng tìm m ng th y 10 © Dương Thành Ph t-www.thayphet.net Khoa CNTT Trư ng TC TÂY NAM Á Gi i thu t: Bư c : i = 1; // B t ñ u t ph n t ñ u tiên c a dãy Bư c : So sánh a[i] v i x, có kh • a[i] = x ; // Tìm th y.D ng • a[i] != x ; // Th c hi n bư c Bư c : • i = i+1; // xét ph n t k ti p m ng • N u i > N // H t m ng.Khơng tìm th y.D ng Ngư c l i: L p l i bư c © Dương Thành Ph t-www.thayphet.net Khoa CNTT Trư ng TC TÂY NAM Á 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 khơng có x else return i ; //a[i] ph n t có khóa x } ðánh giá gi i thu t ð ph c t p tính tốn c p n: T(n)=O(n) © Dương Thành Ph t-www.thayphet.net Khoa CNTT Trư ng TC TÂY NAM Á 2.1.3 Gi i Thu t Tìm Ki m Nh Phân Ý Tư ng: - L n tìm ki m ban đ u ph n t ñ u tiên c a dãy (First = 1) ñ n ph n t cu i c a dãy (Last = N) - So sánh giá tr X v i giá tr ph n t ñ ng gi a c a dãy M 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) - L p l i q trình cho đ n tìm th y ph n t có giá tr X ho c ph m vi tìm ki m khơng cịn n a (First > Last) © Dương Thành Ph t-www.thayphet.net Khoa CNTT Trư ng TC TÂY NAM Á Ưu m: Thu t tốn tìm nh phân s rút ng n đáng k th i gian tìm ki m Như c ñi m: Ch th c hi n ñư c dãy ñã có th t 10 © Dương Thành Ph t-www.thayphet.net Khoa CNTT Trư ng TC TÂY NAM Á Minh H a Cho dãy có ph n t S p x p theo vi trí tăng d n i=1; j=8 L 10 R X=3 15 i j L=1 R=8 ðo n 65 ðo n c n s px p © Dương Thành Ph t-www.thayphet.net ðo n L=1 R=3 L=4 R=8 Khoa CNTT Trư ng TC TÂY NAM Á Minh H a Cho dãy có ph n t S p x p theo vi trí tăng d n i=4; j=8 L R X=5 15 L=4 R=8 66 i L=1 R=3 ðo n ðo n L=4 R=5 10 L=5 R=8 ðo n c n s px p © Dương Thành Ph t-www.thayphet.net j Khoa CNTT Trư ng TC TÂY NAM Á Minh H a Cho dãy có ph n t S p x p theo vi trí tăng d n i=5; j=8 L L=5 R=8 L=4 R=5 L=1 R=3 67 ðo n c n s px p © Dương Thành Ph t-www.thayphet.net X=7 R 15 10 i j ðo n L=6 R=8 Khoa CNTT Trư ng TC TÂY NAM Á Minh H a Cho dãy có ph n t S p x p theo vi trí tăng d n i=6; j=8 L L=6 R=8 X=15 R 15 10 L=4 R=5 L=1 R=3 68 i ðo n ðo n c n s px p © Dương Thành Ph t-www.thayphet.net j L=6 R=7 Khoa CNTT Trư ng TC TÂY NAM Á Minh H a Cho dãy có ph n t S p x p theo vi trí tăng d n i=6; j=7 X=15 L L=6 R=7 L=4 R=5 R 10 i j 15 L=1 R=3 69 ðo n c n s px p © Dương Thành Ph t-www.thayphet.net Khoa CNTT Trư ng TC TÂY NAM Á Minh H a Cho dãy có ph n t S p x p theo vi trí tăng d n i=4; j=5 X=5 L L=4 R=5 R i j 10 15 L=1 R=3 70 ðo n c n s px p © Dương Thành Ph t-www.thayphet.net Khoa CNTT Trư ng TC TÂY NAM Á Minh H a Cho dãy có ph n t S p x p theo vi trí tăng d n i=1; j=3 L X=2 R i 10 15 j L=1 R=3 71 ðo n c n s px p © Dương Thành Ph t-www.thayphet.net Khoa CNTT Trư ng TC TÂY NAM Á Minh H a Cho dãy có ph n t S p x p theo vi trí tăng d n 10 15 Khơng cịn đo n c n s p x p 72 ðo n c n s px p © Dương Thành Ph t-www.thayphet.net Khoa CNTT Trư ng TC TÂY NAM Á 15 15 10 15 10 ðo n [6- 8] 10 15 ðo n [6- 7] 10 ðo n [1- 8] 10 ðo n [4- 8] ðo n [5- 8] ðo n [4- 5] ðo n [1- 3] 73 © Dương Thành Ph t-www.thayphet.net Khoa CNTT Trư ng TC TÂY NAM Á Gi i thu t: Bư c 1: i=1; Bư c 2: j=N; Trong (j>i) th c hi n: N u a[j]N-1: H t dãy, d ng Ngư c l i: L p l i Bư c 74 © Dương Thành Ph t-www.thayphet.net Khoa CNTT Trư ng TC TÂY NAM Á Cài ð t 75 void QuickSort(int M[], int First, int Last) { int i, j, tam, x; x = M[(First+Last)/2]; i = First; j = Last; { while (M[i] X) j ; if (i