写一个堆排序 java
时间: 2023-03-15 14:14:58 浏览: 61
我可以提供一个简单的 Java 堆排序示例:
public class HeapSort
{
public void sort(int arr[])
{
int n = arr.length;
// 构建最大堆
for (int i = n / 2 - 1; i >= 0; i--)
heapify(arr, n, i);
// 从最大堆顶一个一个元素移走,放到数组末尾
for (int i=n-1; i>=0; i--)
{
// 将顶部元素arr[0],与最后一个元素arr[i]交换
int temp = arr[0];
arr[0] = arr[i];
arr[i] = temp;
// 重新 heapify 顶部元素
heapify(arr, i, 0);
}
}
// 从顶部元素开始 heapify
void heapify(int arr[], int n, int i)
{
int largest = i; // 初始化最大元素 为顶部元素
int l = 2*i + 1; // 左子节点
int r = 2*i + 2; // 右子节点
// 如果左子节点大于根节点,将左子节点设为最大值
if (l < n && arr[l] > arr[largest])
largest = l;
// 如果右子节点大于最大值,将右子节点设为最大值
if (r < n && arr[r] > arr[largest])
largest = r;
// 如果最大值不是根节点,需要交换
if (largest != i)
{
int swap = arr[i];
arr[i] = arr[largest];
arr[largest] = swap;
// 递归 heapify 子树
heapify(arr, n, largest);
}
}
static void printArray(int arr[])
{
int n = arr.length;
for (int i=0; i<n; ++i)
System.out.print(arr[i]+" ");
System.out.println();
}
public static void main(String args[])
{
int arr[] = {12, 11, 13, 5, 6, 7};
int n = arr.length;
HeapSort ob = new HeapSort();
ob.sort(arr);
System.out.println("排序后的数组:");
printArray(arr);
}
}