#pragma once
#include<stdio.h>
void Swap(int array[], int i, int j){
int t = array[i];
array[i] = array[j];
array[j] = t;
}
void PrintArray(int array[], int size){
for (int i = 0; i < size; i++){
printf("%d ", array[i]);
}
printf("\n");
}
void AdjustDown(int array[], int size, int rootIdx){
while (1){
int leftIdx = 2 * rootIdx + 1;
int rightIdx = 2 * rootIdx + 2;
if (leftIdx >= size){
return;
}
int maxIdx ;
if (rightIdx >= size) {
maxIdx = leftIdx;
}
else if (array[leftIdx] >= array[rightIdx]){
maxIdx = leftIdx;
}
else{
maxIdx = rightIdx;
}
if (array[maxIdx] <= array[rootIdx]){
return;
}
Swap(array, maxIdx, rootIdx);
AdjustDown(array, size, maxIdx);
}
}
void CreateHeap(int array[], int size){
for (int i = (size - 2) / 2; i >= 0; i--){
AdjustDown(array, size, i);
}
}
void HeapSort(int array[], int size){
CreateHeap(array, size);
for (int i = 0; i < size; i++){
Swap(array, 0, size-1-i);
AdjustDown(array, size - 1 - i, 0);
}
}
void test(){
int array[] = { 3, 9, 1, 4, 7, 5, 2, 8, 0 ,10, 9 };
int size = sizeof(array) / sizeof(int);
PrintArray(array, size);
HeapSort(array, size);
PrintArray(array, size);
}
结果:
3 9 1 4 7 5 2 8 0 10 9
0 1 2 3 4 5 7 8 9 9 10
请按任意键继续. . .