用Java写一个堆排序
时间: 2023-03-15 13:56:20 浏览: 60
我不是很了解Java,但是我可以给出一个简单的堆排序的例子:public void heapSort(int[] array) {
// Build heap (rearrange array)
for (int i = array.length / 2 - 1; i >= 0; i--)
heapify(array, array.length, i);
// One by one extract an element from heap
for (int i=array.length-1; i>=0; i--)
{
// Move current root to end
int temp = array[0];
array[0] = array[i];
array[i] = temp;
// call max heapify on the reduced heap
heapify(array, i, 0);
}
}
// To heapify a subtree rooted with node i which is
// an index in arr[]. n is size of heap
void heapify(int arr[], int n, int i)
{
int largest = i; // Initialize largest as root
int l = 2*i + 1; // left = 2*i + 1
int r = 2*i + 2; // right = 2*i + 2
// If left child is larger than root
if (l < n && arr[l] > arr[largest])
largest = l;
// If right child is larger than largest so far
if (r < n && arr[r] > arr[largest])
largest = r;
// If largest is not root
if (largest != i)
{
int swap = arr[i];
arr[i] = arr[largest];
arr[largest] = swap;
// Recursively heapify the affected sub-tree
heapify(arr, n, largest);
}
}