堆排序
来源:互联网 发布:杭州网络推广 编辑:程序博客网 时间:2024/06/17 01:05
堆排序是一个树形结构,它的特点是,在排序过程中,将R[0,,,n]看成一个完全二叉树的顺序存储结构,利用完全二叉树中双亲结点和孩子结点之间的内在关系,在当前无序区中选择关键字最大或最小的记录。
#include "stdio.h"
void HeapSort( int r[],int n)
{
int i;
int temp;
for(i=n/2;i>=0;i--) /*循环建立初始堆*/
sift(r,i,n);
for(i=n;i>=1;i--)
{
temp=r[0];/*将第一个元素同当前区间内r[0]交换*/
r[0]=r[i];
r[i]=temp;
sift(r,0,i-1); /*筛r[0]结点,得到i-1个结点的堆*/
}
}
int sift(int r[],int low,int high)
{
int i=low,j=2*i;/*r[j]是r[i]的左孩子*/
int temp=r[i];
while(j<=high)
{
if((j<high)&&(r[j]<r[j+1])) /*若右孩子大,把j指向右孩子*/
j++;
if(temp<r[j])
{
r[i]=r[j]; /*将r[j]调整到双亲结点的位置上*/
i=j;
j=2*i; /*修改i,j值,以便继续向下筛选*/
}
else
break; /*筛选结束*/
}
r[i]=temp; /*被筛结点的值放入最终位置*/
}
void main()
{
int i;
int arry[]={8,9,6,4,2,3,1,5,7};
HeapSort(arry,8);
for(i=0;i<=8;i++)
{
printf("%d",arry[i]);
}
getch() ;
}
- 堆及堆排序
- 堆/堆排序特点
- 【二叉堆、堆排序】
- 二叉堆 & 堆排序
- 二叉堆 & 堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆和堆排序
- 堆排序(最大堆)
- 堆和堆排序
- 堆和堆排序
- 堆及堆排序
- 堆和堆排序
- 堆与堆排序
- JavaScript精粹读书笔记(3)
- 刚来的啦
- 金山两道程序题(排列和组合)
- 可变参数说明
- JBPM使用时产生的异常之解决
- 堆排序
- 第11章 运算符重载---《C++程序设计语言(特别版)》
- 说些话
- 最近读c++书的一点感悟
- 精品代码收藏(希望对大家有用)
- 人见人爱A^B
- Visual Studio 2005中容易被忽略的技巧
- 危机产生于缺乏危机感
- 为Oracle中文版输入时间数据