swust.oj1015: 堆排序算法
1015: 堆排序算法
题目描述
编写程序堆排序算法。按照从小到大的顺序进行排序,测试数据为整数。
输入
第一行是待排序数据元素的个数; 第二行是待排序的数据元素。(提示:用小根堆)
输出
一趟堆排序的结果。
样例输入
10
50 36 41 19 23 4 20 18 12 22
样例输出
4 12 20 18 22 41 50 36 19 23
#include<stdio.h>void swap(int a[],int max,int i)
{int temp=a[i];a[i]=a[max];a[max]=temp;
}void heapify(int tree[],int n,int i)
{//参数为数组tree,数组长度n,i是当前子树的根节点 if(i>=n) return;//递归出口 int lc=2*i+1;int rc=2*i+2;int min=i;//找到当前节点左右子树的最大值并与当前节点交换 if(lc<n&&tree[lc]<tree[min]){min=lc;}if(rc<n&&tree[rc]<tree[min]){min=rc;}if(min!=i){swap(tree,min,i);heapify(tree,n,min);//对被交换的子树进行排序 }} void build_heap(int tree[],int n)
{//从最后一个节点的父节点开始创建最大堆,直到遇到根节点 int last_node=n-1;int parent=(last_node-1)/2;//最后一个节点的父节点 for(int i=parent;i>=0;i--){heapify(tree,n,i);}
}void heap_sort(int tree[],int n)
{//先构建一个最大堆 build_heap(tree,n);int i;//最后一个节点和根节点交换,并将最后一个节点砍掉 for(int i=n-1;i>=0;i--){swap(tree,i,0);heapify(tree,i,0);//i表示当前树的节点 }
}
int main()
{int n;scanf("%d",&n);int tree[n];for(int i=0;i<n;i++){scanf("%d",&tree[i]);} build_heap(tree,n);for(int i=0;i<n;i++){printf("%d ",tree[i]);}
}
b站大佬讲解视频
https://www.bilibili.com/video/BV1Eb41147dK?from=search&seid=7761090493431357921
swust.oj1015: 堆排序算法相关推荐
- SWUST OJ 1015: 堆排序算法
1015: 堆排序算法 题目描述 编写程序堆排序算法.按照从小到大的顺序进行排序,测试数据为整数. 输入 第一行是待排序数据元素的个数: 第二行是待排序的数据元素.(提示:用小根堆) 输出 一趟堆排序 ...
- 上标3下标6算法_图解堆排序算法
堆排序定义 一般来说,算法就像数学公式,前人经过不断优化和验证得到有规律性的公式留给后人使用,当然也会交给后人验证的思路.那么堆排序算法就是这样,它有基本固定的定义如下: 1.将数组构建为一颗有规则的 ...
- 9个元素换6次达到排序序列_一文带你读懂排序算法(三):堆排序算法
国庆节快乐~点击上方文字关注我们哦 堆是一种特殊的树形数据结构,其每一个结点都有一个值,通常提到的堆都是指一棵完全二叉树,根结点的值小于(或大于)两个子结点的值,同时,根结点的两个子树也分别是一个堆. ...
- 精通八大排序算法系列:二、堆排序算法
精通八大排序算法系列:二.堆排序算法 作者:July .二零一一年二月二十日 本文参考:Introduction To Algorithms,second edition. ------------- ...
- 堆排序时间复杂度_堆排序算法
堆排序是指利用堆积树这种数据结构所设计的一种排序算法,它是选择排序的一种.可以利用数组的特点快速定位指定索引的元素.堆是一个优先级队列,对于大顶堆而言,堆顶元素的权值最大.将待排序的数组建堆,然后不断 ...
- 【java排序】 归并排序算法、堆排序算法
一.归并排序算法 基本思想: 归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的.然后再把有序子序列合并为整体有序序列. 归并 ...
- JavaScript实现heapsort堆排序算法(附完整源码)
JavaScript实现heapsort堆排序算法(附完整源码) Heap.js完整源代码 MinHeap.js完整源代码 Comparator.js完整源代码 Sort.js完整源代码 HeapSo ...
- 经典排序算法(7)——堆排序算法详解
堆排序(Heap sort)是指利用堆(最大堆.最小堆)这种数据结构所设计的一种排序算法.堆是一个完全二叉树的结构,并同时满足如下性质:即子结点的键值或索引总是小于(或者大于)它的父节点. 一.算法基 ...
- java 实现 堆排序算法_C程序实现堆排序算法
java 实现 堆排序算法 Heap Sort is a comparison-based sorting algorithm that makes use of a different data s ...
最新文章
- PYTHON 写函数,检查传入列表的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者...
- HDU 1425 sort(堆排序)
- session和Cookie的区别
- Linux 运维故障排查思路,有这篇文章就够了
- python做股票系统_GitHub - hetingqin/stock: stock,股票系统。使用python进行开发。
- hosts文件是什么?
- sys/queue.h分析(图片复制不过来,查看原文)
- yum mysql 5.1 innodb_Yum升级mysql5.1到5.6
- vxworks 调式
- 二叉树、多叉树子路径遍历
- 【转】Javabyte[]数组和十六进制String之间的转换Util------包含案例和代码
- AttributeError: module ‘torch.onnx‘ has no attribute ‘set_training‘
- 微信安装包 11 年膨胀 575 倍?QQ安装包800M?谁在抢你的手机内存?
- 穷举查找之旅行商问题、背包问题、分配问题
- mysql blast2go_blast2go本地化教程
- Unable to open JDBC Connection for DDL execution
- 《勋伯格和声学》读书笔记(十一):相隔三个和四个循环五度的转调
- 记一次AWK程序耗时日志分析
- 论文写作——如图所示
- 万事无忧之SEO GOOGLE优化秘诀
热门文章
- RegularExpression
- android rename to(file)方法失败
- splay tree java_伸展树(splay tree)自顶向下的算法
- mysql s授权所有用户_Mysql添加用户并授权
- OA系统二十:请假审批一:审批功能概述;显示【请假审批】这个内嵌界面中【待审批请假数据】的SQL语句;
- TM域名与商标域名有什么不同
- 高效准确地过滤Outlook垃圾邮件
- useradd: warning: the home directory already exists. Not copying any file from skel directory intoit
- 按规律摆放红蓝花盆(python)实现
- 软件架构师-历年论文要点-2013+2018