堆排序—源码
来源:互联网 发布:苏州知行电子有限公司 编辑:程序博客网 时间:2024/05/16 09:24
// Heapsort_ 堆排序cpp : 定义控制台应用程序的入口点。
//
/*
堆排序
*/
#include "stdafx.h"
/********* 用宏定义的形式求节点 i的子节点和父节点 ***********/
#define LEFT ( i) (2* i +1)
#define RIGHT ( i) (2* i +2)
#define PARENT ( i) (( i +1)/2-1)
/********* 交换数值,形参为引用 **********/
void swap ( int & a , int & b)
{
int t = a;
a =b ;
b =t ;
}
/******** 以某个点为子树的根节点,找出此子树中的最大值,并放到根节点处,且其子树也满足此结构 *********/
void HeapAdjust ( int * src , int start, int len )
{
if (NULL == src && len <1)
{
printf ("the dada input is wrong \n" );
return ;
}
int nl = LEFT( start );
int nr = RIGHT( start );
int temp =0;
if (src [ start] < src [nl ] && nl< len )
temp =nl ;
else
temp =start ;
if (src [ temp] < src [nr ] && nr< len )
temp =nr ;
if (temp != start)
{
swap (src [ start], src [temp ]);
HeapAdjust (src , temp, len );
}
}
/******* 建立大顶堆 ******************/
void BuildBigHeap ( int * src , int len)
{
for (int i= PARENT (len -1); i>=0; i --)
{
HeapAdjust (src , i, len );
}
}
/************** 排序 *********************/
void HeapSort ( int * src , int len)
{
BuildBigHeap (src , len);
for (int i= len -1; i >=0; i--)
{
swap (src [0], src[ i ]);
HeapAdjust (src , 0, i);
}
}
/************ 输出********************/
void Printsrc ( int * src , int len)
{
for (int i=0; i <len ; i++)
{
printf ("%d\t" , src[ i ]);
}
}
int _tmain ( int argc , _TCHAR * argv[])
{
int src []={3,5,64,23,12,656,21,67,122,90,43,12};
int len = sizeof( src )/4;
HeapSort (src , len);
Printsrc (src , len);
getchar ();
return 0;
}
结果:
0 0
- 堆排序—源码
- 堆排序C++源码
- 堆排序及其源码
- 堆排序的源码
- 堆排序源码
- 堆排序(源码 + 详细注释)
- heap-sort-源码-堆排序
- 排序算法—堆和堆排序
- 堆排序源码(heap sort)
- 源码系列:堆排序、优先队列
- 排序——堆排序
- 排序——堆排序
- 排序——堆排序
- 排序——堆排序
- 排序——堆排序
- 选择排序—堆排序
- 选择排序—堆排序
- 内部排序—堆排序
- 《C++编程思想》 习题16-12 解答
- Sublime配置java
- nyoj 139 我排第几个
- 小白linux bash 学习二 shell Script
- 表已经创建再增加约束的方法
- 堆排序—源码
- 安装sql server 2008 报错“检查 Microsoft Visual Studio 2008 的早期版本”失败的问题解决
- shell中各括号
- Scala println Array
- HDU-2955 Robberies 01背包 + 概率
- android:ClassNotFoundException for Activity class的解决方法
- Android知识杂记
- Android 动画
- asp.net_Excel数据导入数据库