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 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 và đã là đống thì để cây con gốc i trở thành đống chỉ việc so sánh giá trị với giá trị lớn hơn trong hai giá trị và , nếu nhỏ hơn thì đổi chỗ chúng cho nhau. Nếu đổi chỗ cho , 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)
👁️
159 | 🔗 | 💖 | ✨ | 🌍 | ⌚
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).
Tủ đông Sanaky VH-6699HY4K Model VH-6699HY4K Số ngăn 1 ngăn đông Số cánh 2 cánh Chất liệu dàn lạnh Đồng Công nghệ tiết kiệm điện Inverter Nhiệt độ ngăn đông ≤-18°C Nguồn điện 220V/50Hz Công
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ố 1
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 nghệ tiết
Tủ Đông Sanaky VH-1099K3A Tủ Đông Sanaky VH-1099K3A 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ố 1
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á
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á
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 *
San Hô Vụn túi 1KG + Phân nền thủy sinh DIA MAX AQUA 2KG giàu dinh dưỡng, trang trí bể cá, hồ cá Phân nền DIA MAX AQUA Giàu dinh dưỡng, có thể trồng
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
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
3KG 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
6KG 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
5KG 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
San Hô Vụn túi 1KG 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
4kg 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
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
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
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
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
Tôi từng có rất nhiều ý tưởng: mở một blog chia sẻ kiến thức, làm một khóa học online, thậm chí xây dựng dự án nhỏ cho cộng đồng. Nhưng suốt thời gian dài, tất
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
Cánh kính cường lực bóng bẩy 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
Cánh kính cường lực bóng bẩy 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ỉ
Tủ đông cánh kính cường lực bóng bẩy 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,
**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,
Phân hiệu Đại học Đông Á tại Đắk Lắk có tổng diện tích mặt bằng 10 ha, gồm 3 block nhà A, B, C đang vận hành với công năng 115 phòng học lý thuyết, 27 phòng thực
NCS-ThS Hồ Minh ChâuÔng Hồ Minh Châu đọc cáo tổ Việt Nam quốc, Khánh Hòa tỉnh, Diên Thọ xã, Lễ Thạnh thôn, Hòn Ngang sơn. Nhà thờ họ Hồ tỉnh Khánh Hòa – linh từ
**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
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 để
**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
**_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
Nhằm tôn vinh đạo Phật và ghi nhớ công ơn các Hòa thượng, ghi nhớ nhân dân đã có công xây dựng chùa ở khắp mọi miền tổ quốc, Trung Tâm Sách Pháp Luật -
Là nghi lễ quan trọng bậc nhất thời nhà Nguyễn, Lễ tế trời ở Đàn Nam Giao là khẳng định tính chính thống của triều đại và uy quyền của Hoàng đế của chế độ
**_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
Máy Hút Bụi Công Nghiệp Mini Yili 12 Lít, Có Thể Sử Dụng Trong Gia Đình, Nhà Xưởng, Văn Phòng (Hút Khô - Ướt -Thổi Bụi Đa Năng) - Hàng Chính Hãng Giờ đây,
**_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
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