Để viết thuật toán Heap Sort để sắp xếp một mảng số nguyên trong C#, bạn có thể làm theo các bước sau. Heap Sort là một thuật toán sắp xếp dựa trên cấu trúc dữ liệu Heap (đống), là một dạng cây nhị phân hoàn chỉnh.
Dưới đây là mã nguồn C# cho thuật toán Heap Sort:
using System;
class HeapSortExample
{
// Hàm chính để sắp xếp mảng bằng Heap Sort
public static void HeapSort(int[] array)
{
int n = array.Length;
// Xây dựng heap (đổi chỗ mảng thành một max-heap)
for (int i = n / 2 - 1; i >= 0; i--)
Heapify(array, n, i);
// Trích xuất từng phần tử khỏi heap
for (int i = n - 1; i > 0; i--)
{
// Đổi chỗ phần tử hiện tại với phần tử cuối
Swap(array, 0, i);
// Gọi hàm heapify lên heap đã bị giảm kích thước
Heapify(array, i, 0);
}
}
// Hàm để heapify một cây nhị phân, `n` là kích thước heap, `i` là chỉ số gốc
private static void Heapify(int[] array, int n, int i)
{
int largest = i; // Khởi tạo largest như là gốc
int left = 2 * i + 1; // Chỉ số con trái
int right = 2 * i + 2; // Chỉ số con phải
// Nếu con trái lớn hơn gốc
if (left < n && array[left] > array[largest])
largest = left;
// Nếu con phải lớn hơn largest hiện tại
if (right < n && array[right] > array[largest])
largest = right;
// Nếu largest không phải là gốc
if (largest != i)
{
Swap(array, i, largest);
// Đệ quy heapify cho cây bị ảnh hưởng
Heapify(array, n, largest);
}
}
// Hàm để hoán đổi hai phần tử trong mảng
private static void Swap(int[] array, int a, int b)
{
int temp = array[a];
array[a] = array[b];
array[b] = temp;
}
static void Main(string[] args)
{
int[] array = { 38, 27, 43, 3, 9, 82, 10 };
Console.WriteLine("Mảng trước khi sắp xếp: " + string.Join(", ", array));
HeapSort(array);
Console.WriteLine("Mảng sau khi sắp xếp: " + string.Join(", ", array));
}
}
Giải thích:
-
HeapSort Method: Hàm này là phần chính của thuật toán Heap Sort. Nó bắt đầu bằng cách xây dựng một max-heap từ mảng đầu vào. Sau đó, nó trích xuất các phần tử khỏi heap bằng cách hoán đổi phần tử gốc (lớn nhất) với phần tử cuối cùng của heap và gọi lại hàm
Heapify
trên phần heap còn lại. -
Heapify Method: Hàm này duy trì tính chất heap của cây nhị phân. Nó kiểm tra các con của phần tử tại chỉ số
i
và đảm bảo rằng tính chất max-heap được giữ nguyên. Nếu một trong các con lớn hơn phần tử tạii
, nó sẽ hoán đổi và gọi đệ quy để đảm bảo rằng tính chất max-heap được duy trì. -
Swap Method: Hàm này hoán đổi hai phần tử trong mảng.
-
Main Method: Đây là điểm bắt đầu của chương trình. Nó khởi tạo một mảng, in ra mảng trước và sau khi sắp xếp bằng Heap Sort.
Chạy chương trình sẽ in ra mảng trước và sau khi sắp xếp để bạn có thể thấy kết quả của thuật toán Heap Sort.
Comments