Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 6 - ThS. Phạm Thanh An

35 1K 2
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 6 - ThS. Phạm Thanh An

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 6 - ThS. Phạm Thanh An

Chương 6: Sắp xếp Ths Phạm Thanh An Bộ môn Khoa học máy tính - Khoa CNTT Trường Đại học Ngân hàng TP.HCM LOGO Mục tiêu  Trình bày thuật tốn thơng dụng cho việc xếp (sắp xếp nhớ - RAM)  Minh họa thuật toán  Đánh giá thuật toán Tại cần phải xếp liệu  Chúng ta cần có trật tự yêu cầu tập liệu  Chúng ta cần thực phép tìm kiếm nhị phân, mục CSDL  Là bước khởi đầu cho nhiều giải thuật tập liệu SẮP XẾP (SORTING)  Ví dụ 1:  Sắp xếp danh sách sinh viên theo vần A, B, C  Sắp xếp theo thứ tự điểm tổng kết từ cao đến thấp để xét học bổng sinh viên SẮP XẾP (SORTING)  Ví dụ 2:  Sắp xếp danh sách cán theo mức thu nhập  Sắp xếp danh sách các em học sinh theo trật tự xếp hàng: thấp đứng trước, cao đứng sau SẮP XẾP (SORTING)  Định nghĩa  Sắp xếp trình tổ chức lại tập liệu theo trật tự tăng dần hay giảm dần  Hai mơ hình xếp  Sắp xếp (internal), phần tử cần xếp lưu sẵn RAM  Sắp xếp (external), số phần tử cần xếp lưu RAM, lại lưu nhớ Các phương pháp xếp  Các thuật toán      Thuật toán “Selection sort” Thuật toán “Insertion sort” Thuật toán “Buble sort” Thuật toán “Heap sort” Thuật toán “Quick sort”  Để tiện trình bày, giả sử xếp phần tử mảng A, N phần tử : A [0], A [1], A [2], …, A [N-1] Sắp xếp lựa chọn (selection sort)  Ý tưởng:  Giải thuật “selection sort” xếp danh sách giá trị cách lặp lại việc đặt giá trị cụ thể vào vị trí thích hợp cho dãy xếp  Nói cách khác, với vị trí danh sách, giải thuật tìm giá trị phù hợp cho vị trí Sắp xếp lựa chọn (Selection sort)  Ví dụ: xếp dãy số nguyên theo trật tự tăng dần, ta làm sau:  Ở bước thứ i, chọn phần tử nhỏ dãy a[i], a[i+1], …, a[n]  Đổi chỗ phần tử với phần tử a[i] Sắp xếp lựa chọn (Selection sort) 44 55 12 42 94 18 06 67 44 55 12 42 94 18 06 67 06 55 12 42 94 18 44 67 06 12 55 42 94 18 44 67 06 12 18 42 94 55 44 67 06 12 18 42 94 55 44 67 06 12 18 42 44 55 94 67 06 12 18 42 44 55 94 67 06 12 18 42 44 55 67 94 Sắp xếp bọt (Buble Sort)  Độ phức tạp tính tốn  Ở bước thứ i, có n-i phép so sánh  Thời gian thực giải thuật T(n) ~ O(n2) Sắp xếp nhanh (Quick sort)  Ý tưởng  Xét dãy n phần tử a1,a2,…,an  (1) chọn phần tử x=a[(n+1)div 2] làm khóa  (2) từ hai đầu dãy, gặp cặp a[i]≥x≥a[j] hốn vị hai phần tử  (3) tăng i=i+1, giảm j=j-1  (4) lặp lại (2) i>j (kết thu phân đoạn AxB)  (5) lặp lại (1)-(4) với hai phân đoạn A B  Kết thúc tất phân đoạn thu có chiều dài Sắp xếp nhanh (Quick sort) 44 06 18 55 12 42 94 55 18 44 06 67 06 12 18 12 18 42 44 94 55 94 44 67 06 12 18 42 44 55 94 67 94 67 Sắp xếp nhanh (Quick sort)  Giải thuật void QuickSort(int a[], int l,int r){ int tmp;int i=l;int j=r;int x=a[(l+r)/2]; { while (a[i]x) j ; if (ih2i+2  Chú ý • Các phần tử có số [n/2],…,n-1 nút • HEAP có n phần tử có [n/2] nút Heap sort  Heap sort 94 87 65 36 74 58 11 23 42 Heap sort  Heap sort  Xét dãy 43,23,71,11,65,58,94,36,99,87 43 23 11 71 65 99 94 58 87 36 99 87 36 23 94 65 11 43 58 71 Heap sort  Phương pháp tạo HEAP từ đáy lên  Việc tạo HEAP nút (nút số đến nút số [n/2]-1) 43 23 11 36 71 65 99 87 58 94 Heap sort  Heap sort 99 36 23 11 23 11 87 94 58 71 65 87 36 43 43 99 65 58 94 71 Heap sort  Giải thuật void SetupHeap(int a[], int k, int n) // điều chỉnh phần tử thứ k { int x=a[k]; while (k0;i ){ tmp=a[0];a[0]=a[i];a[i]=tmp; setupHeap(a,0,i); } } Heap sort  Heap sort  Nhận xét • Thời gian thực SetupHeap O(logn) • Thời gian thực MakeHeap O(nlogn) • Thời gian thực HeapSort O(nlogn) Q&A ... 42 94 18 06 67 44 55 12 42 94 18 06 67 06 55 12 42 94 18 44 67 06 12 55 42 94 18 44 67 06 12 18 42 94 55 44 67 06 12 18 42 94 55 44 67 06 12 18 42 44 55 94 67 06 12 18 42 44 55 94 67 06 12 18 42... 55 94 06 06 12 18 42 44 55 94 67 06 12 18 42 44 55 67 94 Sắp xếp chèn (Insert sort)  Ví dụ Dãy ban đầu 34 64 51 32 21 Moved Sau i=1 34 64 51 32 21 Sau i=2 34 64 51 32 21 Sau i=3 34 51 64 32 21... trí n-i+1 Sắp xếp bọt (Buble Sort) 1 23 56 2 23 56 23 23 23 Kết thúc vòng 23 1 23 2 9 Kết thúc vòng 9 56 8 56 10 10 56 10 23 10 10 23 10 100 10 100 10 100 10 100 56 100 -1 00 56 100 56

Ngày đăng: 29/04/2014, 13:08

Từ khóa liên quan

Mục lục

  • Chương 6: Sắp xếp

  • Mục tiêu

  • Tại sao cần phải sắp xếp dữ liệu

  • SẮP XẾP (SORTING)

  • Slide 5

  • Slide 6

  • Các phương pháp sắp xếp

  • Sắp xếp lựa chọn (selection sort)

  • Sắp xếp lựa chọn (Selection sort)

  • Slide 10

  • Slide 11

  • Slide 12

  • Sắp xếp chèn (Insert sort)

  • Slide 14

  • Slide 15

  • Slide 16

  • Slide 17

  • Sắp xếp nổi bọt (Buble Sort)

  • Slide 19

  • Slide 20

Tài liệu cùng người dùng

Tài liệu liên quan