// 堆排序
void heap_sort(int A[LENGTH]) //堆排序算法
{
int i;
int heap_size;
heap_size = LENGTH;
build_max_heap(A);
for(i = LENGTH; i > 0; i--)
{
exchange(A, 0, i-1);
heap_size--;
max_heapify(A, 1, heap_size);
}
}
void max_heapify(int A[LENGTH], int i, int heap_size) // 保证最大堆性质,对A[i-1]进行“下降”
{
int l, r; //左儿子和右儿子下标
int largest; //最大值下标
l = 2 * i - 1;
r = 2 * i;
if(l <= heap_size - 1 && A[l] > A[i-1])
largest = l;
else
largest = i - 1;
if(r <= heap_size - 1 && A[r] > A[largest])
largest = r;
if(largest != i - 1)
{
exchange(A, i - 1, largest);
max_heapify(A, largest + 1, heap_size);
}
}
void exchange(int A[LENGTH], int i, int j)
{
int temp;
temp = A[i];
A[i] = A[j];
A[j] = temp;
}
void build_max_heap(int A[LENGTH]) //创建最大堆
{
int heap_size;
int i, n;
heap_size = LENGTH;
n = floor((double)(LENGTH)/2);
for(i = n; i > 0; i--)
max_heapify(A, i, heap_size);
}
堆排序
最新推荐文章于 2024-08-29 16:37:54 发布