Tải bản đầy đủ (.pdf) (10 trang)

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

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (338.49 KB, 10 trang )

HEAP SORT
HEAP SORT
Heap sort
Heap sort
 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(n
2
). 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)
Heap sort
Heap sort
 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.
Heap sort
Heap sort
 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.
Heap sort
Heap sort
 Ví dụ: Cho dãy 11 3 5 4 9 15 19 7
XD Heap 8

Swap XD Heap 7
 
(A[0],A[7])
Heap sort
Heap sort
Swap XD Heap 6
 
(A[0],A[6])
Swap XD Heap 5
 
(A[0],A[5])
Heap sort
Heap sort
Swap XD Heap 4
 
(A[0],A[4])
Swap XD Heap 3
 
(A[0],A[3])

Heap sort
Heap sort
Swap XD Heap 2
 
(A[0],A[2])
Swap

(A[0],A[1])
 Đượ
c dãy
đ
ã s

p x
ế
p
Heap sort
Heap sort
 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(Left<n && A[Left]>A[i]) Largest = Left;
else Largest = i;
if(Right<n && A[Right]>A[Largest])
Largest = Right;
if(i!=Largest)
{ Swap(A[i],A[Largest]);
Heapify(A,n,Largest);
}

}
Heap sort
Heap sort
//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);
}
}

×