堆排序
来源:互联网 发布:linux下新建文件夹 编辑:程序博客网 时间:2024/05/22 09:00
堆排序是不稳定的排序,其时间复杂度最差、平均、最好均为O(nlogn),空间复杂度为1
对大根堆排序得到的是递增序列(常用)
对小根堆排序得到的是递减序列
♯define LeftChild(i) (2*(i)+1)
void Swap(int *p, int *q);
void PercDown(int A[], int FatherPos, int size);//堆排序功能子函数
void Heapsort(int A[], int size);//堆排序功能函数
int main(void)
{
int A[] = {9,8,7,6,5,4,3,2,1};
int i, size = sizeof(A)/sizeof(int);
Heapsort(A,size);for(i = 0; i < size; i++) printf("%d ",A[i]);printf("\n");return 0;
}
void Heapsort(int A[], int size)
{
int i;
//建大根堆for(i = size/2; i >= 0; i--) PercDown(A,i,size);//堆排序for(i = size-1; i > 0; i--){ Swap(&A[0], &A[i]); PercDown(A,0,i);}
}
void PercDown(int A[], int FatherPos, int size)
{
int Temp;
int Child;
for(Temp = A[FatherPos]; LeftChild(FatherPos) < size; FatherPos = Child){ Child = LeftChild(FatherPos); if((Child != size-1) && (A[Child+1] > A[Child])) Child++; if(Temp < A[Child]) A[FatherPos] = A[Child]; else break;}A[FatherPos] = Temp;
}
void Swap(int *p, int *q)
{
int temp;
temp = *p;
*p = *q;
*q = temp;
}
0 0
- 堆及堆排序
- 堆/堆排序特点
- 【二叉堆、堆排序】
- 二叉堆 & 堆排序
- 二叉堆 & 堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆和堆排序
- 堆排序(最大堆)
- 堆和堆排序
- 堆和堆排序
- 堆及堆排序
- 堆和堆排序
- 堆与堆排序
- 关于技术
- Shader学习笔录--Unity3D教程宝典之Shader篇 CG函数
- 10046 trace的跟踪等级
- 第四章t7
- ViewConfiguration.getScaledTouchSlop () 用法
- 堆排序
- Project Euler:Problem 23 Non-abundant sums
- 第五章t1
- ios动画学习(二)
- 手动给帮助类打 jar包 和 给Web项目打 war包
- HDU 1004 Let the Balloon Rise (map使用)
- 如何对IP地址进行排序?
- Oracle之内存结构(SGA、PGA)
- C5.0算法学习