堆排序
来源:互联网 发布:cd.java.tedu.cn v 编辑:程序博客网 时间:2024/06/08 16:29
堆排序:根据输入数据,利用堆的调整算法形成初始堆,然后交换根元素与尾元素,总的元素个数减1,然后从根往下调整。堆排序的最好、最坏、平均时间复杂度都为O(nlogn)
# include <stdio.h>void heap_adjust(int a[],int i,int len);void heap_sort(int a[],int len);int main (void){int a[]={1,6,46,132,464,3541,654,131,56,41};heap_sort(a,sizeof(a)/sizeof(a[0]));for (int i=0; i<sizeof(a)/sizeof(a[0]); ++i)printf ("%d ",a[i]);return 0;}void heap_adjust(int a[],int i,int len)//整理函数 {int nchild;int temp;for (;2*i+1 < len;i = nchild){nchild = 2*i+1;//子节点在数组中的位置 if (nchild < len-1 && a[nchild] < a[nchild+1])//找到最大的子节点 ++nchild;if (a[i] < a[nchild]) //父节点要大于子节点 {temp = a[i];//进行交换 a[i] = a[nchild];a[nchild] = temp;}elsebreak;}}void heap_sort(int a[],int len)//堆排序 {int i;for (i=len/2-1;i>=0;--i)//将整个数组的数字进行整理 heap_adjust(a,i,len);for (i=len-1;i>0;--i)//逐步缩小范围 {int temp = a[0];a[0] = a[i];a[i] = temp;heap_adjust(a,0,i);//对根节点进行调整 }}
1 0
- 堆及堆排序
- 堆/堆排序特点
- 【二叉堆、堆排序】
- 二叉堆 & 堆排序
- 二叉堆 & 堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆和堆排序
- 堆排序(最大堆)
- 堆和堆排序
- 堆和堆排序
- 堆及堆排序
- 堆和堆排序
- 堆与堆排序
- 20160402系统集成管理工程师(test3)
- mac配置git环境
- HttpClient设置请求头
- ZOJ 3710 Friends【floyd思想递推】
- bzoj 1406: [AHOI2007]密码箱
- 堆排序
- Android和“时间”有关的一些常用函数
- 自勉
- tomcat jvm 调优监控(Linux)
- ZOJ 3714Java Beans (华男神版)
- linux 获取本机 ip 地址
- CSS之元素相关
- (2) Hive 数据导入方式
- 19 字符数据及字符类型 项目 (1- 字母及其编码 ) (2- 能对齐的数据)