Chuong 21. SẮP XẾP Nguyễn Văn Linh Khoa Công nghệ thông tin & Truyền thông ĐẠI HỌC CẦN THƠ 9. Ví dụ sắp xếp chọn 12 10 10 9 9 6 5 3 2 2 Kết quả 12 10 Bước 8 10 12 10 Bước 7 10 12 10 9 Bước 6 10 9 10 12 9 Bước 5 10 9 10 9 12 6 Bước 4 6 9 10 9 12 10 5 Bước 3 5 9 10 9 12 10 6 3 Bước 2 3 9 10 9 12 10 6 5 2 Bước 1 3 9 10 9 12 10 2 5 6 2 Bước 0 3 9 10 9 12 10 2 2 6 5 Ban đầu a[9] a[8] a[7] a[6] a[5] a[4] a[3] a[2] a[1] a[0] Khóa Bước 10. Lưu đồ sắp xếp chọn Begin i = 0 i<=n-2 lowindex = i lowkey = a[i].key j<=n-1 i = i+1 a[j].key<lowkey lowindex = j lowkey = a[j].key j = j+1 j = i+1 End swap(a[i],a[lowindex]) S Đ Đ Đ S S 15. Ví dụ sắp xếp xen 12 10 10 9 9 6 5 3 2 2 Bước 9 12 10 10 9 9 6 5 2 2 Bước 8 12 10 10 9 6 5 2 2 Bước 7 12 10 9 6 5 2 2 Bước 6 12 10 6 5 2 2 Bước 5 10 6 5 2 2 Bước 4 6 5 2 2 Bước 3 6 5 2 Bước 2 6 5 Bước 1 3 9 10 9 12 10 2 2 6 5 Ban đầu a[9] a[8] A[7] a[6] a[5] a[4] a[3] a[2] a[1] a[0] Khóa Bước 16. Lưu đồ sắp xếp xen Begin i = 1 i<=n-1 (j>0) and (a[j].key < a[j-1].key) i = i+1 j = i End swap(a[j],a[j-1]) j = j-1 S Đ Đ S 20. Ví dụ sắp xếp “nổi bọt” 12 10 10 9 9 6 5 3 2 2 Kết quả 12 10 Bước 9 12 10 10 Bước 8 12 10 10 9 Bước 7 12 10 10 9 9 Bước 6 12 10 10 9 9 6 Bước 5 12 10 10 9 9 6 5 Bước 4 10 12 10 9 9 6 5 3 Bước 3 10 9 12 10 9 3 6 5 2 Bước 2 9 10 9 12 10 3 2 6 5 2 Bước 1 3 9 10 9 12 10 2 2 6 5 Ban đầu a[9] a[8] a[7] a[6] A[5] a[4] a[3] a[2] a[1] a[0] Khóa Bước 21. Lưu đồ sắp xếp nổi bọt Begin i = 0 i<=n-2 i = i+1 j = n-1 End swap(a[j],a[j-1]) S Đ Đ S a[j].key < a[j-1].key j>= i+1 Đ j = j-1 S 26. Ví dụ về phân hoạch Chốt p = 8 L=0 R=9 4 15 1 8 12 5 10 2 8 5 Khoá 9 8 7 6 5 4 3 2 1 0 Chỉ số 27. Ví dụ về phân hoạch L= 1 Chốt p = 8 R=9 4 15 1 8 12 5 10 2 8 5 Khoá 9 8 7 6 5 4 3 2 1 0 Chỉ số 28. Ví dụ về phân hoạch L= 1 Chốt p = 8 R=9 8 15 1 8 12 5 10 2 4 5 Khoá 9 8 7 6 5 4 3 2 1 0 Chỉ số 29. Ví dụ về phân hoạch L= 2 Chốt p = 8 R=9 8 15 1 8 12 5 10 2 4 5 Khoá 9 8 7 6 5 4 3 2 1 0 Chỉ số 30. Ví dụ về phân hoạch L= 3 Chốt p = 8 R=9 8 15 1 8 12 5 10 2 4 5 Khoá 9 8 7 6 5 4 3 2 1 0 Chỉ số 31. Ví dụ về phân hoạch L= 3 Chốt p = 8 R= 8 8 15 1 8 12 5 10 2 4 5 Khoá 9 8 7 6 5 4 3 2 1 0 Chỉ số 32. Ví dụ về phân hoạch L= 3 Chốt p = 8 R= 7 8 15 1 8 12 5 10 2 4 5 Khoá 9 8 7 6 5 4 3 2 1 0 Chỉ số 33. Ví dụ về phân hoạch L= 3 Chốt p = 8 R= 7 8 15 10 8 12 5 1 2 4 5 Khoá 9 8 7 6 5 4 3 2 1 0 Chỉ số 34. Ví dụ về phân hoạch L= 4 Chốt p = 8 R= 7 8 15 10 8 12 5 1 2 4 5 Khoá 9 8 7 6 5 4 3 2 1 0 Chỉ số 35. Ví dụ về phân hoạch L= 5 Chốt p = 8 R= 7 8 15 10 8 12 5 1 2 4 5 Khoá 9 8 7 6 5 4 3 2 1 0 Chỉ số 36. Ví dụ về phân hoạch L= 5 Chốt p = 8 R= 6 8 15 10 8 12 5 1 2 4 5 Khoá 9 8 7 6 5 4 3 2 1 0 Chỉ số 37. Ví dụ về phân hoạch L= 5 Chốt p = 8 R= 5 8 15 10 8 12 5 1 2 4 5 Khoá 9 8 7 6 5 4 3 2 1 0 Chỉ số 38. Ví dụ về phân hoạch L= 5 Chốt p = 8 R= 4 8 15 10 8 12 5 1 2 4 5 Khoá 9 8 7 6 5 4 3 2 1 0 Chỉ số 5 1 2 4 5 4 3 2 1 0 8 15 10 8 12 9 8 7 6 5 40. Ví dụ về QuickSort Chốt p = 8 Chốt p = 5 5 1 2 4 5 8 15 10 8 12 4 15 1 8 12 5 10 2 8 5 Khoá 9 8 7 6 5 4 3 2 1 0 Chỉ số 41. Ví dụ về QuickSort Chốt p = 8 Chốt p = 5 Chốt p = 4 8 15 10 8 12 5 1 2 4 5 Khoá 9 8 7 6 5 4 3 2 1 0 Chỉ số 5 1 5 2 4 5 1 8 15 10 8 12 2 4 1 5 5 42. Ví dụ về QuickSort Chốt p = 8 Chốt p = 5 Chốt p = 4 Chốt p = 2 1 2 xong xong xong xong Chốt p = 12 8 15 10 8 12 5 1 2 4 5 Khoá 9 8 7 6 5 4 3 2 1 0 Chỉ số 5 1 5 2 4 5 1 8 15 10 8 12 2 4 4 2 1 5 5 2 1 4 43. Ví dụ về QuickSort Chốt p = 8 Chốt p = 5 Chốt p = 4 Chốt p = 2 1 2 xong xong xong xong Chốt p = 12 Chốt p = 10 xong xong Chốt p = 15 8 15 10 8 12 5 1 2 4 5 Khoá 9 8 7 6 5 4 3 2 1 0 Chỉ số 5 1 5 2 4 5 1 8 12 15 10 8 12 8 2 4 4 2 1 5 5 2 1 4 10 8 8 12 15 8 8 10 44. Ví dụ về QuickSort Chốt p = 8 Chốt p = 5 Chốt p = 4 Chốt p = 2 1 2 xong xong xong xong Chốt p = 12 Chốt p = 10 xong xong Chốt p = 15 xong xong 8 15 10 8 12 5 1 2 4 5 Khoá 9 8 7 6 5 4 3 2 1 0 Chỉ số 5 1 5 2 4 5 1 8 12 15 10 8 12 8 2 4 4 2 1 5 5 2 1 4 10 8 8 12 15 15 12 8 8 10 12 15 45. Lưu đồ h àm FindPivot Begin k = i+1 firstkey = a[i].key (k<=j) and (a[k].key == firstkey k > j a[k].key>firstkey k = k+1 End Đ Đ Đ S S return -1 return i return k i, j S 48. Lưu đồ h àm Partition Begin L = i; R = j L <= R a[R].key >= pivot a[L].key < pivot L = L+1 End Đ Đ S S return L i, j, pivot S R = R-1 L < R Swap(a[L], a[R]) Đ S Đ 58. Lưu đồ h àm PushDown Begin r = first r <= (last-1)/2 a[r].key > a[last].key last==2*r+1 r = last End Đ Đ S S first, last S swap(a[r],a[last]) a[r].key > a[2*r+1].key and a[2*r+1].key <= a[2*r+2].key swap(a[r], a[2*r+1]) r = 2*r+1 Đ S Đ S a[r].key > a[2*r+2].key and a[2*r+2].key < a[2*r+1].key swap(a[r], a[2*r+2]) r = 2*r+2 Đ r = last 63. HeapSort: Trình bày bằng bảng T ạo Heap 3 9 10 9 12 10 2 2 6 5 Ban đầu a[9] a[8] a[7] a[6] A[5] a[4] a[3] a[2] a[1] a[0] Khóa Bước