Đang tải... (xem toàn văn)
Các giải thuật sắp xếp
S P X PẮ ẾNguy n Văn Linhễ M c tiêuụSau khi hoàn t t bài h c này b n c n ph i:ấ ọ ạ ầ ảHi u các gi i thu t s p x p.ể ả ậ ắ ếV n d ng đ c gi i thu t đ minh h a vi c s p ậ ụ ượ ả ậ ể ọ ệ ắx p.ếHi u các l u đ c a các gi i thu t s p x p.ể ư ồ ủ ả ậ ắ ếHi u các ch ng trình s p x p. ể ươ ắ ếHi u đ c vi c đánh giá các gi i thu t. ể ượ ệ ả ậ T m quan tr ng c a bài toán s p x pầ ọ ủ ắ ếS p x p m t danh sách các đ i t ng theo m t ắ ế ộ ố ượ ộth t nào đó là m t bài toán th ng đ c v n ứ ự ộ ườ ượ ậd ng trong các ng d ng tin h c.ụ ứ ụ ọS p x p là m t yêu c u không th thi u trong ắ ế ộ ầ ể ếkhi thi t k các ph n m m. ế ế ầ ềDo đó vi c nghiên c u các ph ng pháp s p ệ ứ ươ ắx p là r t c n thi t đ v n d ng trong khi l p ế ấ ầ ế ể ậ ụ ậtrình. S p x p trong và s p x p ngoàiắ ế ắ ếS p x p trongắ ế là s s p x p ự ắ ế d li u đ c t ch c trong b nh ữ ệ ượ ổ ứ ộ ớtrong c a máy tính.ủCác đ i t ng c n đ c s p x p là các m u tin g m m t ho c nhi u ố ượ ầ ượ ắ ế ẩ ồ ộ ặ ềtr ng. M t trong các tr ng đ c g i là khóa (key), ki u c a nó là m t ườ ộ ườ ượ ọ ể ủ ộki u có quan h th t (nh các ki u s nguyên, s th c, chu i ký t .). ể ệ ứ ự ư ể ố ố ự ỗ ựDanh sách các đ i t ng c n s p x p s là m t m ng c a các m u tin ố ượ ầ ắ ế ẽ ộ ả ủ ẩv a nói trên. ừ ởM c đích c a vi c s p x p là t ch c l i các m u tin sao cho các khóa ụ ủ ệ ắ ế ổ ứ ạ ẩc a chúng đ c s p th t t ng ng v i quy lu t s p x p. ủ ượ ắ ứ ự ươ ứ ớ ậ ắ ếM t cách m c nhiên, quy lu t s p x p là th t không gi m. Khi c n s p ộ ặ ậ ắ ế ứ ự ả ầ ắx p theo th t không tăng thì ph i nói rõ.ế ứ ự ảS p x p ngoàiắ ế là s s p x p đ c s d ng khi s l ng đ i t ng c n ự ắ ế ượ ử ụ ố ượ ố ượ ầs p x p l n không th l u tr trong b nh trong mà ph i l u tr trên ắ ế ớ ể ư ữ ộ ớ ả ư ữ b ộnh ngoàiớ . T ch c d li u và ngôn ng cài đ tổ ứ ữ ệ ữ ặÐ trình bày các ví d minh h a chúng ta s dùng C ể ụ ọ ẽ(Turbo C++, Version 3.0) làm ngôn ng th hi n và ữ ể ệs d ng khai báo sau. ử ụconst int n = 10;typedef int keytype;typedef float othertype;typedef struct recordtype {keytype key;othertype otherfields; };recordtype a[n]; /* khai bao mang a co n phan tu */ T ch c d li u và ngôn ng cài đ t (tt)ổ ứ ữ ệ ữ ặvoid Swap(recordtype *x, recordtype *y){ recordtype temp; temp = *x; *x = *y; *y = temp;}C n th y r ng th t c Swap l y O(1) th i gian vì ch ầ ấ ằ ủ ụ ấ ờ ỉth c hi n 3 l nh gán n i ti p nhau.ự ệ ệ ố ế Gi i thu t s p x p ch n (Selection Sort)ả ậ ắ ế ọB c 0, ch n ph n t có khóa nh nh t trong n ph n ướ ọ ầ ử ỏ ấ ầt t a[0] đ n a[n-1] và hoán v nó v i ph n t a[0].ử ừ ế ị ớ ầ ửB c 1, ch n ph n t có khóa nh nh t trong n-1 ph n ướ ọ ầ ử ỏ ấ ầt t a[1] đ n a[n-1] và hoán v nó v i a[1].ử ừ ế ị ớT ng quát b c th i, ch n ph n t có khoá nh ổ ở ướ ứ ọ ầ ử ỏnh t trong n-i ph n t t a[i] đ n a[n-1] và hoán v nó ấ ầ ử ừ ế ịv i a[i].ớSau n-1 b c này thì m ng đã đ c s p x p.ướ ả ượ ắ ế Ph ng pháp ch n ph n tươ ọ ầ ửĐ u tiên ta đ t khoá nh nh t là khoá c a a[i] (lowkey ầ ặ ỏ ấ ủ= a[i].key) và ch s c a ph n t có khoá nh nh t là i ỉ ố ủ ầ ử ỏ ấ(lowindex = i).Xét các ph n t a[j] (v i j t i+1 đ n n-1), n u khoá c a ầ ử ớ ừ ế ế ủa[j] nh h n khoá nh nh t (a[j].key < lowkey) thì đ t ỏ ơ ỏ ấ ặl i l i khoá nh nh t là khoá c a a[j] (lowkey = a[j].key) ạ ạ ỏ ấ ủvà ch s c a ph n t có khoá nh nh t là j (lowindex ỉ ố ủ ầ ử ỏ ấ= j).Khi đã xét h t các a[j] (j>n-1) thì ph n t có khoá nh ế ầ ử ỏnh t là a[lowindex]. ấ Ví d s p x p ch nụ ắ ế ọ KhóaBước a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9]Ban đầu 5 6 2 2 10 12 9 10 9 3Bước 0 2 6 5 2 10 12 9 10 9 3Bước 1 25 6 10 12 9 10 9 3Bước 236 10 12 9 10 9 5Bước 3510 12 9 10 9 6Bước 4612 9 10 9 10Bước 5912 10 9 10Bước 6910 12 10Bước 71012 10Bước 81012Kết quả 2 2 3 5 6 9 9 10 10 12 L u đ ư ồs p x p ch nắ ế ọBegini = 0i<=n-2lowindex = ilowkey = a[i].keyj<=n-1i = i+1a[j].key<lowkeylowindex = jlowkey = a[j].keyj = j+1Sj = i+1Endswap(a[i],a[lowindex])SĐSĐĐ [...]... b nh ữ ệ ượ ổ ứ ộ ớ trong c a máy tính.ủ Các đ i t ng c n đ c s p x p là các m u tin g m m t ho c nhi u ố ượ ầ ượ ắ ế ẩ ồ ộ ặ ề tr ng. M t trong các tr ng đ c g i là khóa (key), ki u c a nó là m t ườ ộ ườ ượ ọ ể ủ ộ ki u có quan h th t (nh các ki u s nguyên, s th c, chu i ký t ). ể ệ ứ ự ư ể ố ố ự ỗ ự Danh sách các đ i t ng c n s p x p s là m t m ng c a các m u tin ố ượ ầ ắ ế ẽ ộ ả ủ ẩ v a nói trên.... ệ T(n) = O(n). M c tiêuụ Sau khi hoàn t t bài h c này b n c n ph i:ấ ọ ạ ầ ả Hi u các gi i thu t s p x p.ể ả ậ ắ ế V n d ng đ c gi i thu t đ minh h a vi c s p ậ ụ ượ ả ậ ể ọ ệ ắ x p.ế Hi u các l u đ c a các gi i thu t s p x p.ể ư ồ ủ ả ậ ắ ế Hi u các ch ng trình s p x p. ể ươ ắ ế Hi u đ c vi c đánh giá các gi i thu t. ể ượ ệ ả ậ Ví d v phân ho chụ ề ạ Chỉ số 0 1 2 3 4 5 6 7 8 9 Khoá 5... ch tố . Ví d :ụ Ch n ch t trong các m ng sauọ ố ả – Cho m ng g m các ph n t có khố là 6, 6, 5, 8, 7, 4, ta ch n ả ồ ầ ử ọ ch t là 6 (khoá c a ph n t đ u tiên).ố ủ ầ ử ầ – Cho m ng g m các ph n t có khố là 6, 6, 7, 5, 7, 4, ta ch n ả ồ ầ ử ọ ch t là 7 (khoá c a ph n t th 3).ố ủ ầ ử ứ – Cho m ng g m các ph n t có khố là 6, 6, 6, 6, 6, 6 thì khơng ả ồ ầ ử có ch t (các ph n t có khố b ng nhau).ố ầ ử... các đ i t ng c n s p x p s là m t m ng c a các m u tin ố ượ ầ ắ ế ẽ ộ ả ủ ẩ v a nói trên. ừ ở M c đích c a vi c s p x p là t ch c l i các m u tin sao cho các khóa ụ ủ ệ ắ ế ổ ứ ạ ẩ c a chúng đ c s p th t t ng ng v i quy lu t s p x p. ủ ượ ắ ứ ự ươ ứ ớ ậ ắ ế M t cách m c nhiên, quy lu t s p x p là th t không gi m. Khi c n s p ộ ặ ậ ắ ế ứ ự ả ầ ắ x p theo th t không tăng thì ph i nói rõ.ế ứ ự ả S... 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”.ầ ủ ả ả T ch c d li u và ngôn ng cài đ tổ ứ ữ ệ ữ ặ Ð trình bày các ví d minh h a chúng ta s dùng C ể ụ ọ ẽ (Turbo C++, Version 3.0) làm ngôn ng th hi n và ữ ể ệ s d ng khai báo sau. ử ụ const int n = 10; typedef int keytype; typedef float othertype; typedef struct... Ví d v phân ho chụ ề ạ Chỉ số 0 1 2 3 4 5 6 7 8 9 Khoá 5 4 2 1 5 12 8 10 15 8 L=4 Ch t p = 8ố R=7 Ph ng pháp xenươ Ph n t đang xét a[j] s đ c xen vào v trí thích ầ ử ẽ ượ ị h p trong danh sách các ph n t đã đ c s p tr c ợ ầ ử ượ ắ ướ đó a[0],a[1], a[j-1]: So sánh khố c a a[j] v i khoá c a a[j-1] đ ng ngay ủ ớ ủ ứ tr c nó. ướ N u khố c a a[j] nh h n khố c a a[j-1] thì hoán ế ủ ỏ ơ ủ đ i a[j-1] . i:ấ ọ ạ ầ ảHi u các gi i thu t s p x p.ể ả ậ ắ ếV n d ng đ c gi i thu t đ minh h a vi c s p ậ ụ ượ ả ậ ể ọ ệ ắx p.ếHi u các l u đ c a các gi i thu t. ộ ớtrong c a máy tính.ủ Các đ i t ng c n đ c s p x p là các m u tin g m m t ho c nhi u ố ượ ầ ượ ắ ế ẩ ồ ộ ặ ềtr ng. M t trong các tr ng đ c g i là khóa