/*
2013年1月4日16:29:29
堆排序,建成大顶堆的形式,然后进行输出或者其他操作
在VC++6.0的运行结果是:
---------------------------
80 35 30 20 17 15 12 10 2
---------------------------
*/
# include <stdio.h>
# define N 10
void HeapSort(int data[], int n );
void HeapAdjust(int data[], int s ,int m);
int main(void)
{
int a[] = {0,20,12,35,15,10,80,30,17,2,1} ;
HeapSort(a,N);
putchar(10);
return 0 ;
}
void HeapAdjust(int data[], int s ,int m)
{
int rc = data[s];
for (int j = 2 * s ; j <= m ; j *= 2)
{
if (j < m && data[j] < data[j+1])
{
j ++ ;
}
if (rc >= data[j] )
{
break;
}
data[s] = data[j] ;
s = j ;
}
data[s] = rc ;
return ;
}
void HeapSort(int data[], int n )
{
for (int i = n /2 ; i > 0 ; i -- )
{
HeapAdjust(data,i,n);
}
for(i = n ; i > 1 ; -- i)
{
printf("%d ",data[1]);
int temp = data[1] ;
data[1] = data[i] ;
data[i] = temp;
HeapAdjust(data,1,i-1);
}
return ;
}
堆排序的算法实现(C/C++)
最新推荐文章于 2023-02-16 15:36:45 发布