1. Trang chủ
  2. » Công Nghệ Thông Tin

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

10 449 0
Tài liệu đã được kiểm tra trùng lặp

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

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 10
Dung lượng 338,49 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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ò

Trang 1

HEAP SORT

Trang 2

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(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)

Trang 3

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

Trang 4

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

Trang 5

Heap sort

 Ví dụ: Cho dãy 11 3 5 4 9 15 19 7

XD Heap 8



(A[0],A[7])

Trang 6

Heap sort

(A[0],A[6])

(A[0],A[5])

Trang 7

Heap sort

(A[0],A[4])

(A[0],A[3])

Trang 8

Heap sort

(A[0],A[2])

Swap



(A[0],A[1])

 Được dãy đã sắp xếp

Trang 9

Heap sort

 Code:

//hoan vi nut cha thu i phai lon hon nut con

void Heapify (int A[],int n, int i)

if(Right<n && A[Right]>A[Largest])

Largest = Right;

if(i!=Largest)

Heapify(A,n,Largest);

} }

Trang 10

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 )

Heapify(A,i,0);

} }

Ngày đăng: 09/07/2014, 17:20

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm