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

👁️ 0 | 🔗 | 💖 | ✨ | 🌍 | ⌚
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
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
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 *
**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
**_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,
**_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
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
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
**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
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
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
**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
**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ý
**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
**Địa chất kĩ thuật** là ứng dụng của Địa chất học - là môn khoa học nghiên cứu về các vật chất rắn và lỏng cấu tạo nên Trái Đất, đúng ra là nghiên cứu
**_Scaphochlamys penyamar_** là một loài thực vật có hoa trong họ Gừng. Loài này được Ooi Im Hin, Kalu Meekiong và Wong Sin Yeng miêu tả khoa học đầu tiên năm 2017. Loài này sinh
nhỏ|325x325px|[[Bảng tuần hoàn.]] Trong hóa học, **phi kim** là một nhóm nguyên tố hóa học mà tính kim loại của những nguyên tố này không chiếm ưu thế. Ở điều kiện tiêu chuẩn (298 K
**HMS _Hood_ (51)** là chiếc tàu chiến-tuần dương cuối cùng và cũng đồng thời là chiếc tàu chiến-tuần dương duy nhất thuộc lớp Admiral của Hải quân Hoàng gia Anh Quốc được chế tạo hoàn
**_The Other Final_** là một bộ phim tài liệu năm 2003 do làm đạo diễn. Bộ phim có nội dung về trận đấu bóng đá giữa Bhutan và Montserrat, hai đội bóng có thứ hạng
nhỏ|phải|Một buổi hẹn hò **Lần hẹn hò đầu tiên** hay **buổi hẹn hò đầu tiên** (_First date_) là cuộc gặp gỡ ban đầu trong quá trình hẹn hò của hai người, khi hai bên sắp
nhỏ|phải|[[Săn|Săn bắn để kiểm soát số lượng động vật là một trong những biện pháp khá phổ biến ở Hoa Kỳ, đặc biệt là đối với lợn hoang, việc săn bắn lợn hoang ở Mỹ
**Nyuserre Ini** (còn được viết là **Neuserre Ini** hay **Niuserre Ini**, và đôi khi là **Nyuserra**; trong tiếng Hy Lạp tên của ông được gọi là Rathoris, _Ραθούρης_), là một pharaon của Ai Cập cổ
Series _Yu-Gi-Oh!_ do Kazuki Takahashi sáng tạo bao gồm nhiều nhân vật khác nhau. Bối cảnh diễn ra tại thành phố hư cấu Domino ở Nhật Bản, nơi sinh sống của hầu hết nhân vật
nhỏ|phải|Bún bò Huế, một trong những nét đặc trưng của ẩm thực xứ Huế **Ẩm thực Huế** là cách gọi của phương thức chế biến món ăn, nguyên lý chế biến, trang trí, phong cách
**Mir Osman Ali Khan, Asaf Jah VII** GCSI GBE (5 là Nizam (người cai trị) cuối cùng của Phiên quốc Hyderabad, nhà nước lớn nhất của Ấn Độ thuộc Anh. Ông lên ngôi vào ngày
**Giải bóng đá Vô địch Quốc gia 2023**, tên gọi chính thức là **Giải bóng đá Vô địch Quốc gia Night Wolf 2023** () vì lý do tài trợ, là mùa giải chuyên nghiệp thứ
Xoài là một trong những loại cây ăn quả nhiệt đới quan trọng tại Việt Nam, nổi bật với hương vị ngọt thanh và mùi thơm đặc trưng. Cây xoài thích hợp với khí hậu
Xoài là một trong những loại cây ăn quả nhiệt đới quan trọng tại Việt Nam, nổi bật với hương vị ngọt thanh và mùi thơm đặc trưng. Cây xoài thích hợp với khí hậu
Xoài là một trong những loại cây ăn quả nhiệt đới quan trọng tại Việt Nam, nổi bật với hương vị ngọt thanh và mùi thơm đặc trưng. Cây xoài thích hợp với khí hậu
Xoài là một trong những loại cây ăn quả nhiệt đới quan trọng tại Việt Nam, nổi bật với hương vị ngọt thanh và mùi thơm đặc trưng. Cây xoài thích hợp với khí hậu
**Khoái Châu** là một huyện cũ nằm ở phía tây tỉnh Hưng Yên, Việt Nam. ## Địa lý ### Vị trí địa lý Huyện Khoái Châu nằm ở phía tây của tỉnh Hưng Yên, nằm
**_Lộc Đỉnh ký_** () hay **_Lộc Đỉnh Công_** là cuốn tiểu thuyết cuối cùng của Kim Dung, nội dung là phần tiếp theo của tiểu thuyết Bích huyết kiếm và nhân vật chính trong tiểu
phải|Thiết giáp hạm [[USS Texas (1892)|USS _Texas_, chế tạo năm 1892, là thiết giáp hạm đầu tiên của Hải quân Hoa Kỳ. Ảnh màu Photochrom được chụp vào khoảng năm 1898.]] phải|[[HMS Ocean (1898)|HMS _Ocean_,
**_OK Computer_** là album phòng thu thứ ba của ban nhạc rock người Anh Radiohead, do hai hãng đĩa con của EMI là Parlophone và Capitol Records phát hành vào năm 1997. Đây là album
**_Scaphochlamys scintillans_** là một loài thực vật có hoa trong họ Gừng. Loài này được Ooi Im Hin, Kalu Meekiong và Wong Sin Yeng miêu tả khoa học đầu tiên năm 2017. Loài này sinh
**Phú Yên** là một tỉnh cũ ven biển nằm ở trung tâm khu vực duyên hải Nam Trung Bộ, miền Trung Việt Nam. Tỉnh lỵ của tỉnh là thành phố Tuy Hòa. Năm 2018, Phú
**Giáo dục Việt Nam** dưới chính thể Cộng hòa xã hội chủ nghĩa Việt Nam (từ 1976 đến nay) là một sự tiếp nối của giáo dục thời Việt Nam Dân chủ Cộng hòa. Khi