数据结构 堆排序问题,高手请进
发布网友
发布时间:2022-04-29 22:08
我来回答
共4个回答
热心网友
时间:2022-05-22 02:42
又有注释又调试通过的程序,多好!以下部分已经在win-tc和Dev-c++下调试通过。
void Heapify(int s,int m) /*这就是你所需要的部分*/
{
int j,temp; /*对R[1..n]进行堆调整,用temp做暂存单元 */
temp=R[s];
j=2*s;
while (j<=m)
{
if (R[j]>R[j+1]&&j<m) j++;
if (temp<R[j]) break;
R[s]=R[j];
s=j;
j=j*2;
}
R[s]=temp;
}
void BuildHeap(int n)
{ /* 由一个无序的序列建成一个堆 */
int i;
for(i=n/2;i>0;i--)
Heapify(i,n);
}
原题和你这题都是大根堆。
如果是小根堆,只要将程序中的大于号相应改为小于号即可:
if (R[j]<R[j+1]&&j<m) j++;
if (temp>R[j]) break;
参考资料:具体请参阅:http://zhidao.baidu.com/question/80787783.html
热心网友
时间:2022-05-22 04:00
从最后一个有孩子节点的元素开始到第一个元素为止
1:筛选62得序列(46,25,78,29,12,37,70,62)
2:筛选78得序列(46,25,37,29,12,78,70,62)
3:筛选25得序列(46,12,37,29,25,78,70,62)
4:筛选46得序列(12,25,37,29,46,78,70,62)分两步
热心网友
时间:2022-05-22 05:35
代码
/*小根树*/#include<iostream>
using namespace std;
int a[10000];
int n;
void check(int i)
{
int min;
if(2*i<n)
{
if(n%2==0&&i==n/2)
min=2*i;
else
min=a[2*i]<a[2*i+1]?2*i:2*i+1;
if(a[i]>a[min])
{
a[0]=a[i];
a[i]=a[min];
a[min]=a[0];
check(min);
}
}
}
void bheap()
{
for(int i=n/2/*最后一个有子的节点*/;i>0;i--)
check(i);/*最多N次*/
}
int main()
{
cin>>n;
int i;
for(i=1;i<=n;i++)
cin>>a[i];
bheap();
for(i=n;i>=1;i--)
{
cout<<a[1]<<endl;
a[1]=a[n];
check(1);
n--;
}
system("pause");
return 0;
}
热心网友
时间:2022-05-22 07:26
又有注释又调试通过的程序,多好!以下部分已经在win-tc和Dev-c++下调试通过。
void
Heapify(int
s,int
m)
/*这就是你所需要的部分*/
{
int
j,temp;
/*对R[1..n]进行堆调整,用temp做暂存单元
*/
temp=R[s];
j=2*s;
while
(j<=m)
{
if
(R[j]>R[j+1]&&j<m)
j++;
if
(temp<R[j])
break;
R[s]=R[j];
s=j;
j=j*2;
}
R[s]=temp;
}
void
BuildHeap(int
n)
{
/*
由一个无序的序列建成一个堆
*/
int
i;
for(i=n/2;i>0;i--)
Heapify(i,n);
}
原题和你这题都是大根堆。
如果是小根堆,只要将程序中的大于号相应改为小于号即可:
if
(R[j]<R[j+1]&&j<m)
j++;
if
(temp>R[j])
break;
数据结构习题请高手帮忙?
起始(64),(56,23,89,10,75)第一趟 (56,64),(23,89,10,75)第二趟 (23,56,64),(89,10,75)第三趟 (23,56,64,89),(10,75)第四趟 (10,23,56,64,89),(75)第五趟 (10,23,56,64,75,89)2. 冒泡排序 起始(50,38,77,26,45,69)第一趟(38,5...
数据结构高手进,帮忙答下题
一、1、B 2、B 3、 ?4、C 《 A的深度为1,B的深度为3,D的深度为3》5、C 6、B?7、C 8、B 直接插入排序 :n个不同的数据元素,最多需要比较n*(n-1)/2 9、C 10、A 二、1.线性结构 ,非线性结构 。2. 352 < 100+ (6*20+6)*2 > , 232 ...
我遇到一些数据结构的问题,请高手帮忙给解答,跪谢!!!
1, t->next = p->next 2, p=head 3, n-k 4,1
关于数据结构的问题,用C语言描述
在不少数据结构的教材中,是把查找与排序放入高级数据结构中的。应该说,查找和排序两章是前面我们所学的知识的综合运用,用到了树、也用到了链表等知识,对这些数据结构某一方面的运用就构成了查找和排序。现实生活中,search几乎无处不在,特别是现在的网络时代,万事离不开search,小到文档内文字的搜索,大到INTERNET上...
请excel高手请进回答一下这个简单的问题(200分)
刚好前几天帮朋友解决了这么个问题.解决思路是这样的,首先Excel中用VB编程不方便也不实用.所以绕路前进.首先在Excel中对表进行按第一列排序.然后输出成为csv文件,我编了个小程序处理这个文件.你把CSV文件命名为"tel.csv"然后和我的程序放在一起,运行一次程序,然后将生成的"telnew.csv"导入Excel随意咯...
高中数学高手请帮帮忙啊排列组合问题
先从6个班里选出两个班A、B,共有C(6,2)=6*5/2=15种;再从4名学生中选择2个进入A班,自然剩下两个就进入B班,共有C(4,2)=4*3/2=6种;所以一共有15*6=90中方案。
word文件域排序的问题,高手请进.
1.先检查你的“第一节”是不是word的自动编号,必须是自动编号,才能自动按序号增长;2.在确认是自动编号的情况下,如果仍然全部都是“第一节”,那就选中第一个“第一节”,点击工具栏上的“格式刷”图标,然后把其他几个“第一节”用格式刷都刷一遍,就会自动变成“第二节”、“第三节”、…...
求C++完整代码,高手请进,成功运行还有加分
void heapsort()//堆排序 O(nlgn){ build();int i;for(i=len;i>=2;i--){ int tmp=a[i];a[i]=a[1];a[1]=tmp;size--;maxheapify(1);} }//heapsort之后,size为1;void max_heap_insert(int key)//插入值为key的元素 { size++;a[size]=key;heap_change_key(...
大话数据结构的作品目录
1.3数据结构起源 41.4基本概念和术语 5正所谓“巧妇难为无米之炊”,再强大的计算机,也要有“米”下锅才可以干活,否则就是一堆破铜烂铁。这个“米”就是数据。1.4.1数据 51.4.2数据元素 51.4.3数据项 61.4.4数据对象 61.4.5数据结构 61.5逻辑结构与物理结构 71.5.1逻辑结构 71.5.2物理结构 91.6抽象...
excel随机生产区间数字后排序,急高手请进!
如图,假定随机数字在B1:B5,选A1到A5,输入公式:=SMALL(B1:B5,ROW()),按CTRL+SHIFT+ENTER键(数组公式),A1:A5得到楼主需要的结果