堆排序是一種高效的排序演演算法,基於二元堆積資料結構實現。它具有穩定性、時間複雜度為O(nlogn)和空間複雜度為O(1)的特點。
public static void HeapSort(int[] array)
{
int arrayLength = array.Length;
//構建最大堆
for (int i = arrayLength / 2 - 1; i >= 0; i--)
Heapify(array, arrayLength, i);
//依次取出堆頂元素,並重新調整堆
for (int i = arrayLength - 1; i >= 0; i--)
{
//將堆頂元素與當前最後一個元素交換
int temp = array[0];
array[0] = array[i];
array[i] = temp;
//重新調整堆
Heapify(array, i, 0);
}
}
private static void Heapify(int[] arr, int n, int i)
{
int largest = i; //假設父節點最大
int left = 2 * i + 1; //左子節點
int right = 2 * i + 2; //右子節點
//如果左子節點大於父節點,則更新最大值
if (left < n && arr[left] > arr[largest])
largest = left;
//如果右子節點大於父節點和左子節點,則更新最大值
if (right < n && arr[right] > arr[largest])
largest = right;
//如果最大值不是當前父節點,則交換父節點和最大值,並繼續向下調整堆
if (largest != i)
{
int swap = arr[i];
arr[i] = arr[largest];
arr[largest] = swap;
Heapify(arr, n, largest);
}
}
public static void HeapSortRun()
{
int[] array = { 19, 27, 46, 48, 50, 2, 4, 44, 47, 36, 38, 15, 26, 5, 3, 99, 888, 0, -1 };
Console.WriteLine("排序前陣列:" + string.Join(", ", array));
HeapSort(array);
Console.WriteLine("排序後陣列:" + string.Join(", ", array));
}
堆排序是一種高效的排序演演算法,通過構建最大堆和反覆調整堆的操作,實現對陣列的排序。其時間複雜度為O(nlogn),並且具有較好的穩定性和空間效率。但是由於其涉及大量的元素交換操作,所以在實際應用中,可能不如快速排序等演演算法效率高。
作者名稱:追逐時光者
作者簡介:一個熱愛程式設計、善於分享、喜歡學習、探索、嘗試新事物和新技術的全棧軟體工程師。
本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連結,否則保留追究法律責任的權利。如果該篇文章對您有幫助的話,可以點一下右下角的【♥推薦♥】,希望能夠持續的為大家帶來好的技術文章,文中可能存在描述不正確的地方,歡迎指正或補充,不勝感激。