只需要heapify
时间复杂度o(nlogn)
void heapify(int index,int heapSize,int *heapArray)
{
int left = index * 2 + 1;
while (left < heapSize)
{
int largest = left + 1 < heapSize && heapArray[left + 1] > heapArray[left] ? left + 1 : left;
if (heapArray[index] > heapArray[largest])
break;
swap(heapArray[index], heapArray[largest]);
index = largest;
left = index * 2 + 1;
}
}
void heapsort(int *arr,int length)
{
for (int i = length - 1; i >= 0; i--)
{
heapify(i, length, arr);
}
swap(arr[0], arr[--length]);
while (length > 0)
{
heapify(0, length, arr);
swap(arr[0], arr[--length]);
}
}
int main()
{
int arr[]={ 5, 3, 2, 8, 9, 6, 7, 1, 4 };
heapsort(arr, sizeof(arr) / sizeof(arr[0]));
for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++)
{
cout << arr[i] << ' ';
}
return 0;
}
输出:
1 2 3 4 5 6 7 8 9