intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Cấu trúc dữ liệu và giải thuật (phần 5)

Chia sẻ: Nguyen Kien | Ngày: | Loại File: PDF | Số trang:10

137
lượt xem
53
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Tiếp tục với các thuật toán sắp xếp kinh điển, trong tài liệu này các bạn sẽ làm quen với thuật toán heap sort, một thuật toán có độ phức tạp hàm log, nó hơi phức tạp để hiểu

Chủ đề:
Lưu

Nội dung Text: Cấu trúc dữ liệu và giải thuật (phần 5)

  1. HEAP SORT HEAP
  2. Heap sort Heap Gi i thi u: - S p x p vun ng (heapsort) là 1 trong các phương pháp s p x p ch n (ch n ph n t l n nh t (ho c nh nh t) t vào cu i (ho c u) danh sách, sau ó ti p t c v i ph n còn l i c a danh sách). - S p x p ch n có ph c t p O(n2). Nhưng Heapsort s d ng c u trúc d li u c bi t ư c g i là ng (heap) ph c t p O(nlgn)
  3. Heap sort Heap Gi i thi u: - Khái ni m heap và phương pháp s p x p Heapsort do J.Williams xu t. - ng là cây nh phân mà giá tr m i nh cha l n hơn ho c b ng giá tr các nh con. - M t khi danh sách d li u ã ư c vun thành ng, g c c a nó là ph n t l n nh t, thu t toán s gi i phóng nó kh i ng t vào cu i danh sách.
  4. Heap sort Heap Gi i thu t: - Xem danh sách n ph n t là cây nh phân. - Cây nh phân ư c xác nh như sau: t i nút th i tương ng v i ch s th i c a m ng có con trái là nút 2*(i+1)-1 và con ph i 2*(i+1) n u 2*(i+1)-1 và 2*(i+1) nh hơn n. - Xây d ng Heap: m i nút cha u có giá tr l n hơn nút con. Khi ó nút g c là nút có giá tr l n nh t. - Hoán v nút g c v i nút th n – 1 và xây d ng l i Heap m i v i n – 2 nút.
  5. Heap sort Heap Ví d : Cho dãy 11 3 5 4 9 15 19 7 XD Heap 8 Swap XD Heap 7 (A[0],A[7])
  6. Heap sort Heap Swap XD Heap 6 (A[0],A[6]) Swap XD Heap 5 (A[0],A[5])
  7. Heap sort Heap Swap XD Heap 4 (A[0],A[4]) Swap XD Heap 3 (A[0],A[3])
  8. Heap sort Heap Swap XD Heap 2 (A[0],A[2]) Swap (A[0],A[1]) ư c dãy ã s p x p
  9. Heap sort Heap Code: //hoan vi nut cha thu i phai lon hon nut con void Heapify (int A[],int n, int i) { int Left = 2*(i+1)-1, Right = 2*(i+1), Largest; if(LeftA[i]) Largest = Left; else Largest = i; if(RightA[Largest]) Largest = Right; if(i!=Largest) { Swap(A[i],A[Largest]); Heapify(A,n,Largest); } }
  10. Heap sort Heap //xay dung Heap sao cho moi nut cha luon lon hon nut con void BuildHeap (int A[], int n) { for(int i = n/2-1; i>=0; i--) Heapify(A,n,i); } void HeapSort (int A[], int n) { BuildHeap(A,n); for(int i = n-1; i>0; i--) { Swap(A[0],A[i]); Heapify(A,i,0); } }
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2