易网时代-编程资源站
Welcome
微信登录
编程资源
图片资源库
蚂蚁家优选
PDF转换器
软件资源
软件开发
、
小程序制作
、
系统集成与运维
、
空间租用
、
硬件开发
、
视频监控
、
技术咨询与支持
——联系电话:0311-88999002/88999003
首页
/
操作系统
/
Linux
/
【算法导论】C++实现堆排序
堆排序的过程就不说明了,代码如下:
void
Build_Max_Heap(
int
array_list[] ,
const
int
array_size,
const
int
index);
bool
HeapSort(
int
array_list[],
const
int
array_size);
int
main()
{
const
int
size = 10;
int
array_list [] ={16,14,10,8,7,9,3,2,4,1};
HeapSort(array_list,size);
return
0;
}
bool
HeapSort(
int
array_list[],
const
int
array_size)
{
if
(array_size < 0)
{
return
false
;
}
for
(
int
i=0;i<array_size;i++)
{
for
(
int
j = ((array_size - i)/2-1);j>=0;j--)
{
Build_Max_Heap(array_list,array_size - i,j);
}
int
tmp = array_list[0];
array_list[0] = array_list[array_size -1 - i];
array_list[array_size -1 - i] = tmp;
std::cout<<"Sorted:"<<i+1<<" ";
for
(
int
i=0;i<array_size;i++)
{
std::cout<<array_list[i]<<" ";
}
std::cout<<std::endl;
}
return
true
;
}
/*构建大根堆*/
void
Build_Max_Heap(
int
array_list[] ,
const
int
array_size,
const
int
index)
{
int
left_index = 2*index + 1;
int
right_index = 2*index + 2;
int
largest = index;
if
((right_index < array_size) )
{/*在建立大根堆时,如果父节点比两个子节点都小,则交换最大的一个子节点*/
if
((array_list[left_index] < array_list[right_index]))
{
largest = right_index;
}
else
{
largest = left_index;
}
}
else
{
if
(left_index < array_size)
{
largest = left_index;
}
}
if
((array_list[index] < array_list[largest]) && (largest != index))
{
int
tmp = array_list[index];
array_list[index] = array_list[largest];
array_list[largest] = tmp;
/*如果交换了某个节点的值,则需要递归交换其子树的节点*/
Build_Max_Heap(array_list,array_size,largest);
}
}
收藏该网址
版权所有©石家庄振强科技有限公司2024
冀ICP备08103738号-5
网站地图