您好,登錄后才能下訂單哦!
堆排序
#include<stdio.h>
typedef int ElementType;
int arr1[11]={0,2,87,39,49,34,62,53,6,44,98};
void Swap(int* a,int* b)
{
int temp=*a;
*a=*b;
*b=temp;
}
void PercDown(int A[], int i, int N)
{
int child;
ElementType Tmp;
for (Tmp = A[i]; 2*i+1 < N; i = child){
child = 2*i+1; //注意數組下標是從0開始的,所以左孩子的求發不是2*i
if (child != N - 1 && A[child + 1] > A[child])
++child; //找到最大的兒子節點
if (Tmp < A[child])
A[i] = A[child];
else
break;
}
A[i] = Tmp;
}
void HeapSort(int A[], int N)
{
int i;
for (i = N / 2; i >= 0; --i)
PercDown(A, i, N); //構造堆
for(i=N-1;i>0;--i)
{
Swap(&A[0],&A[i]); //將最大元素(根)與數組末尾元素交換,從而刪除最大元素,重新構造堆
PercDown(A, 0, i);
}
}
void Print(int A[],int N)
{
int i;
for(i=0;i<N;i++)
{
printf(" %d ",A[i]);
}
}
int main()
{
int arr[10]={2,87,39,49,34,62,53,6,44,98};
Print(arr,10);
printf("\n");
HeapSort(arr,10);
Print(arr,10);
printf("\n");
return 0;
}
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。