✨Sắp xếp vun đống

Sắp xếp vun đống

nhỏ|Mô phỏng thuật toán sắp xếp vun đống|403x403px Sắp xếp vun đống (Heapsort) dựa trên một cấu trúc dữ liệu được gọi là đống nhị phân (binary heap), gọi đơn giản là đống. Trong mục này chỉ nói về đống trong bài toán sắp xếp.

Đống (Heap)

  • phải|Ví dụ về mảng và cây nhị phân tương ứngMỗi mảng a[1..n] có thể xem như một cây nhị phân gần đầy (có trọng số là các giá trị của mảng), với gốc ở phần tử thứ nhất, con bên trái của đỉnh a[i] là a[2i] con bên phải là a[2i+1] (nếu mảng bắt đầu từ 1 còn nếu mảng bắt đầu từ 0 thì hai con là a[2i+1] và a[2i+2]) (nếu 2i<=n hoặc 2i+1<=n, khi đó các phần tử có chỉ số lớn hơn int\left(\frac n 2 \right) không có con, do đó là lá) (leaf). *phải|Ví dụ mảng (45,23,35,13,15,12,15,7,9) là một đống Một cây nhị phân, được gọi là đống cực đại nếu khóa của mọi nút không nhỏ hơn khóa các con của nó. Khi biểu diễn một mảng a[] bởi một cây nhi phân theo thứ tự tự nhiên điều đó nghĩa là a[i]>=a[2i] và a[i]>=a[2i+1] với mọi i =1..int(n/2). Ta cũng sẽ gọi mảng như vậy là đống. Như vậy trong đống a[1] (ứng với gốc của cây) là phần tử lớn nhất. Mảng bất kỳ chỉ có một phần tử luôn luôn là một đống. Một đống cực tiểu được định nghĩa theo các bất đẳng thức ngược lại: a[i]<=a[2i] và a[i]<=a[2i+1]. Phần tử đứng ở gốc cây cực tiểu là phần tử nhỏ nhất.

Vun đống

Việc sắp xếp lại các phần tử của một mảng ban đầu sao cho nó trở thành đống được gọi là vun đống.

Vun đống tại đỉnh thứ i

thumb|458x458px Nếu hai cây con gốc 2i và 2i+1 đã là đống thì để cây con gốc i trở thành đống chỉ việc so sánh giá trị a[i] với giá trị lớn hơn trong hai giá trị a[2i] và a[2i+1], nếu a[i] nhỏ hơn thì đổi chỗ chúng cho nhau. Nếu đổi chỗ cho a[2*i], tiếp tục so sánh với con lớn hơn trong hai con của nó cho đên khi hoặc gặp đỉnh lá. (Thủ tục DownHeap trong giả mã dưới đây)

Vun một mảng thành đống

Để vun mảng a[1..n] thành đống ta vun từ dưới lên, bắt đầu từ phần tử a[j]với j =Int(n/2) ngược lên tới a[1]. (Thủ tục MakeHeap trong giả mã dưới đây)

Sắp xếp bằng vun đống

: Đổi chỗ (Swap): Sau khi mảng a[1..n] đã là đống, lấy phần tử a[1] trên đỉnh của đống ra khỏi đống đặt vào vị trí cuối cùng n, và chuyển phần tử thứ cuối cùng a[n] lên đỉnh đống thì phần tử a[n] đã được đứng đúng vị trí. : Vun lại: Phần còn lại của mảng a[1..n-1] chỉ khác cấu trúc đống ở phần tử a[1]. Vun lại mảng này thành đống với n-1 phần tử. : Lặp: Tiếp tục với mảng a[1..n-1]. Quá trình dừng lại khi đống chỉ còn lại một phần tử.

Ví dụ

Cho mảng a=(2,5,8,12,45,13,45,78) :Ở đây n = 7. Các phần tử từ a[4] đến a[7] là lá.

Vun đống

Vun cây gốc a[3] ta được mảng a=(2,3,7,6,4,1,5) Vun cây gốc a[2] ta được mảng a=(2,6,7,3,4,1,5) Vun cây gốc a[1] ta được mảng a=(7,6,5,3,4,1,2) Bây giờ a=(7,6,5,3,4,1,2) đã là đống.

Sắp xếp

  • Đổi chỗ a[1] với a[7]: a=(2,6,5,3,4,1,7) *: và vun lại mảng a[1..6] ta được mảng a=(6,4,5,3,2,1,7)
  • Đổi chỗ a[1] với a[6]: a=(1,4,5,3,2,6,7) *: và vun lại mảng a[1..5] ta được mảng a=(5,4,1,3,2,6,7)
  • Đổi chỗ a[1] với a[5]: a=(2,4,1,3,5,6,7) *: và vun lại mảng a[1..4] ta được mảng a=(4,3,1,2,5,6,7)
  • Đổi chỗ a[1] với a[4]: a=(2,3,1,4,5,6,7) *: và vun lại mảng a[1..3] ta được mảng a=(3,2,1,4,5,6,7)
  • Đổi chỗ a[1] với a[3]: a=(1,2,3,4,5,6,7) *: và vun lại mảng a[1..2] ta được mảng a=(2,1,3,4,5,6,7)
  • Đổi chỗ a[1] với a[2]:a=(1,2,3,4,5,6,7)
  • Mảng còn lại chỉ một phần tử. Quá trình sắp xếp đã xong.

Mã giả bằng ngôn ngữ C có sử dụng câu trúc dữ liệu

#include #include

const int n = 10; typedef int keytype; typedef float othertype; typedef struct recordtype { keytype key; othertype otherfields; }; // khai bao mang a co n phan tu recordtype a[n];

void Swap(recordtype &x, recordtype &y) { recordtype temp; temp = x; x = y; y = temp; }

void PushDown(int first, int last) { //while (r <= (last - 1) / 2) if (first == last || first > (last - 1) / 2) return; if (last == 2 first + 1) { if (a[first].key > a[last].key) Swap(a[first], a[last]); //first = last; return; } else if ((a[first].key > a[2first+1].key) && (a[2first+1].key <= a[2first+2].key)) { Swap(a[first], a[2first+1]); PushDown(2 first + 1, last); } else if ((a[first].key > a[2first+2].key) && (a[2first+2].key < a[2first+1].key)) { Swap(a[first], a[2first+2]); PushDown(2 * first + 2, last); } else return; //first = last; }

void HeapSort(void) { int i; for(i = (n-2) / 2; i >= 0; i--) PushDown(i, n-1); for(i = n-1; i>=2; i--) { Swap(a[0], a[i]); PushDown(0, i-1); } Swap(a[0], a[1]); }

void readList(recordtype a[]) { for (int i = 0; i < n; i++) { printf("Phan tu %d = ", i+1); scanf("%d",&a[i]); } } void printList(recordtype a[]) { for (int i = 0; i < n; i++) { printf("%d ", a[i]); } } int main() { printf("Nhap %d phan tu cho danh sach.\n", n); readList(a); printf("Danh sach sau khi duoc nhap: \n"); printList(a); HeapSort(); printf("\nDanh sach sau khi duoc sap xep: \n"); printList(a); getch(); return 0; }

Ứng dụng

*Ngoài giải thuật sắp xếp vun đống, cấu trúc đống còn được ứng dụng trong nhiều giải thuật khác, khi cần lấy ra nhanh chóng các phần tử lớn nhất (hoặc nhỏ nhất) của một dãy phần tử, chẳng hạn trong hàng đợi có ưu tiên trong đó tiêu chuẩn ưu tiên là có khóa lớn nhất (hoặc nhỏ nhất). Có thể tìm thấy điều đó trong giải thuật tìm bộ mã Huffman cho một bảng tần số của các ký tự.(tacgia)

👁️ 68 | ⌚2025-09-16 22:26:31.465

QC Shopee
nhỏ|Mô phỏng thuật toán sắp xếp vun đống|403x403px **Sắp xếp vun đống** (_Heapsort_) dựa trên một cấu trúc dữ liệu được gọi là đống nhị phân (_binary heap_), gọi đơn giản là đống. Trong mục
Trong khoa học máy tính và trong toán học, **thuật toán sắp xếp** là một thuật toán sắp xếp các phần tử của một danh sách (hoặc một mảng) theo thứ tự (tăng hoặc giảm).
Những [[chấn tâm động đất toàn cầu, 1963–1]] **Động đất** hay **địa chấn** (Tiếng Anh: _earthquake_, Chữ Hán: 地震) là sự rung chuyển trên bề mặt Trái Đất do kết quả của sự giải phóng
Tủ đông Sanaky VH-5699HYK Suốt 27 năm hình thành và phát triển Sanaky luôn tâm niệm và ngày một nỗ lực phát triển sản phẩm chất lượng để cho ra mắt quý khách hàng những
Tủ Đông Sanaky VH-1008KA Tủ Đông Sanaky VH-1008KA là dòng tủ đông kính cong phù hợp sử dụng trưng bày hàng hóa với dung tích 750 Lít được trang bị công nghệ làm lạnh số
Mô tả tủ đông Sanaky VH-8699H4K Inverter 761 lít - Tủ đông Sanaky thiết kế 1 ngăn đông 2 cửa mở trên. dung tích thực 761 lít, dài 2m. - Là dòng tích hợp công
nhỏ|phải|Khỉ đuôi sóc, loài linh trưởng chuyên ăn côn trùng **Động vật ăn côn trùng** hay **động vật ăn sâu bọ** (insectivore) là các loài động vật ăn thịt mà thực đơn chính trong bữa
Bài viết này là **danh sách các thuật toán** cùng một mô tả ngắn cho mỗi thuật toán. ## Thuật toán tổ hợp ### Thuật toán tổ hợp tổng quát * Thuật toán Brent: tìm
Xốp Lọc Bể Cá 90x 30cm + San Hô Vụn 1KG lọc nước, trang trí bể cá - Xốp Lọc Bể Cá 90x 30cm + San Hô Vụn 1KG lọc nước, trang trí bể cá
San Hô Vụn túi 1KG + Phân nền thủy sinh SMEKONG II 2KG giàu dinh dưỡng, trang trí bể cá, hồ cá Phân nền SMEKONG Giàu dinh dưỡng, có thể trồng cây ngay khi sử
Bông Lọc + San Hô Vụn 1KG vật liệu lọc hồ cá, trang trí bể cá, hồ thủy sinh - Bông lọc giúp lọc rác, phân cá, chất bẩn trong bể cá. - Làm sạch
Bài này nói về từ điển các chủ đề trong toán học. ## 0-9 * -0 * 0 * 6174 ## A * AES * ARCH * ARMA * Ada Lovelace * Adrien-Marie Legendre *
Combo 4 Cuốn Chữa Lành Tâm Hồn Hay-Chúng Ta Rồi Sẽ Hạnh Phúc, Theo Những Cách Khác Nhau+Một Cuốn Sách Chữa Lành+Bên Trong Chúng Ta Đã Vụn Vỡ Như Thế Nào?+Đứa Trẻ Hiểu Chuyện Thường
2KG San Hô Vụn vật liệu lọc hồ cá, trang trí bể cá, hồ thủy sinh - San hô vụn có tác dụng lọc nước cũng như các loại vật liệu gốm lọc hay nham
KHU VỰC CẦN GIỜ CÓ GIAO HÀNG TÍNH PHÍ, VUI LÒNG LIÊN HỆ TRƯỚC. * Lắp đặt miễn phí lúc giao hàng ở nhà trệt / có thang máy. * Cần hỗ trợ giao hàng
Tăng độ bền cho tủ đông Tủ được tráng 1 lớp mặt kính cường lực bền chắc giúp giảm khả năng va đập hay bị trầy xước, hoen rỉ theo năm tháng do người sử
BÁN HÀNG CHO NHỮNG GÃ KHỔNG LỒ Ngày nay, việc sắp xếp các cuộc họp bán hàng với những người ra quyết định tại các công ty lớn là vô cùng khó khăn. Nếu thấy
Máy thái thịt thay dao ABG HD-90 Công suất 850W, inox dày dặn, không oxy hóa, gỉ sét, motor lõi đồng nguyên chất bền bỉ Cấu tạo Vỏ máy được làm hoàn toàn bằng inox
Suốt 27 năm hình thành và phát triển Sanaky luôn tâm niệm và ngày một nỗ lực phát triển sản phẩm chất lượng để cho ra mắt quý khách hàng những sản phẩm Của người
**Vụ nổ tại Hà Đông 2016** là một vụ nổ xảy ra vào khoảng 15 giờ 10 phút (UTC+07:00) ngày 19 tháng 3 năm 2016 tại khu đô thị Văn Phú ở quận Hà Đông,
**Trượt băng nghệ thuật** (tiếng Anh: _figure skating_) là môn thể thao trong đó các cá nhân, đôi hoặc nhóm biểu diễn bằng giày trượt băng trên sân băng. Đây là môn thể thao mùa
**Virus**, thường được viết là **vi-rút** (bắt nguồn từ tiếng Pháp _virus_ /viʁys/), còn được gọi là **siêu vi**, **siêu vi khuẩn** hay **siêu vi trùng**, là một tác nhân truyền nhiễm chỉ nhân lên
Sứ Lọc Hồ Cá túi 1KG và 1 túi đựng vật liệu lọc bể cá SIZE TO 37 x 29cm Túi đựng vật liệu lọc kích thước 37x 29cm ( dài x rộng) Dùng để
**_7 viên ngọc rồng: Thời đại tiến hóa_** (tiếng Anh: **_Dragonball Evolution_**) là bộ phim điện ảnh thuộc thể loại hành động - phiêu lưu - kỳ ảo do Hoàng Nghị Du làm đạo diễn,
**_Con tàu Chiến Thắng_** (tên gốc , còn được biết đến với tên tiếng Anh: **_Space Sweepers_**) là phim điện ảnh không gian của Hàn Quốc năm 2021 do Jo Sung-hee đạo diễn. Bộ phim
Lớp xà cừ óng ánh của ốc anh vũ (chi _[[Nautilus_).]] Một miếng xà cừ Biểu đồ cấu trúc hiển vi của xà cừ, chỉ ra cách sắp xếp của các miếng aragonit nhỏ với
**_Mulholland Drive_** (hay cách điệu hóa **_Mulholland Dr._**) là một bộ phim điện ảnh thuộc thể loại neo-noir giật gân, bí ẩn và tâm lý của Mỹ và Pháp ra mắt năm 2001 do David
**_Người Sắt 3_** (tựa gốc tiếng Anh: **_Iron Man 3_**, viết cách điệu trên màn ảnh là **_Iron Man Three_**) là phim điện ảnh siêu anh hùng của Mỹ năm 2013 dựa trên nhân vật
**_2 ngày 1 đêm_** (viết tắt: **_2N1Đ_**) là chương trình truyền hình trải nghiệm thực tế do Đài Truyền hình Thành phố Hồ Chí Minh và công ty Đông Tây Promotion phối hợp thực hiện,
Vở tập viết Tiếng Anh Family and Friends (National Edition) là bộ tài liệu dùng cho học sinh cấp Tiểu học được trình bày trên giấy ô li. Bộ tài liệu giúp học sinh vừa
7 Thói quen hôn nhân hạnh phúc giúp bạn đọc vun đắp ba điều trên thông qua những bài học về nguyên lý và tạo thói quen hiệu quả được trình bày theo dạng 7
**_Nữ điệp viên_** (tiếng Anh: **_Salt_**) là một bộ phim hành động Mỹ sản xuất năm 2010, đạo diễn bởi Phillip Noyce, kịch bản bởi Kurt Wimmer, các vai chính do Angelina Jolie, Liev Schreiber,
**Hải âu cổ rụt Đại Tây Dương** (danh pháp khoa học: **_Fratercula arctica_**) là một loài chim biển trong họ Alcidae. Đây là loài hải âu cổ rụt bản địa duy nhất của Đại Tây
**Trăn gấm**, **Trăn vua** hay **Trăn mắt lưới châu Á** (tên khoa học **_Python reticulatus_**) là một loại trăn lớn, thuộc họ Trăn (_Pythonidae_) và chi cùng tên (_Python_), sống ở vùng Đông Nam Á.
**Airbus A380** là chiếc máy bay phản lực thân rộng hai tầng, bốn động cơ, hai lối đi thứ hai và là máy bay vận tải hành khách lớn nhất trên thế giới đến thời
**Người Sán Dìu** (hoặc Sán Déo, Trại, Trại Đất, Mán quan cốc, San Déo Nhín, ; Hán Việt: Sơn Dao tộc) là một dân tộc thiểu số trong số 54 dân tộc tại Việt Nam
nghĩa là "Gió toả sáng", một bộ manga nổi tiếng của nữ mangaka Watanabe Taeko, được phát hành tại Nhật Bản từ năm 1997 bởi nhà xuất bản Shogakukan. Tại Việt Nam, truyện được phát
**Arkaim** là một di chỉ khảo cổ nằm ở vùng thảo nguyên Nam Ural, khoảng 8,2 km (5,1 dặm Anh) về phía bắc tây bắc làng Amursky, và khoảng 2,3 km (1,4 dặm Anh) về phía nam
hay **_Tân Ám hành ngự sử_** là một bộ truyện tranh Hàn-Nhật dành cho người lớn của tác giả Youn In-Wan và Yang Kyung-il, thuộc thể loại Seinen manga. "Ám hành ngự Sử" được dựng
thế=Head and shoulders photograph of Konon Molody wearing a jacket and tie|nhỏ| [[Konon Molody với tên vỏ bọc Gordon Lonsdale, năm 1961]] **Mạng lưới điệp báo Portland** () là nhóm gián điệp Liên Xô hoạt
**Tuyển đế hầu August xứ Sachsen** (31 tháng 7 năm 1526 – 11 tháng 2 năm 1586) là Tuyển hầu xứ Sachsen từ năm 1533 đến khi qua đời vào năm 1586, và là tuyển
Nếu bạn là kiểu người “suy tính rất nhiều nhưng không thể hành động”, hoặc bạn đã nghe không biết bao nhiêu lời khuyên đắt giá nhưng vẫn không thể sống tốt trên đời, có
Trường Đại học Văn Lang (English: Van Lang University; Latin: Universitas Vanlangensis) là một trường đại học tư thục ở Việt Nam, được thành lập theo quyết định số 71/TTg năm 1995 của Thủ tướng
**Bộ luật Eshnunna** là các câu văn khắc trên hai phiến đá được tìm thấy tại Tell Abū Harmal, gần Baghdad, Iraq, hiện được lưu giữ trong Viện Bảo tàng Quốc gia Iraq với ký
1. Làm Đúng Việc, Xong Đúng Hạn Danh sách việc cần làm của bạn quá dài và bạn dường như chẳng bao giờ hoàn thành hết mọi nhiệm vụ? Bạn bị mất động lực vì