【发布时间】:2017-11-13 03:41:06
【问题描述】:
我需要实现这个函数的递归版本:
static void peneira (int m, int v[]) {
int f=2, t;
while(f<=m){
count_Iteracoes_HeapSort++;
if(f<m && v[f] < v[f+1])++f;
if(v[f/2] >= v[f]) break;
t = v[f/2]; v[f/2] = v[f]; v[f] = t;
f *= 2;
}
}
我正在做这样的事情:
static void peneiraRec(int m,int v[]){
count_Iteracoes_HeapSort++;
int f=2,t;
if(m<=1) {
return;
}
while(f<=m) {
peneiraRec(m - 1, v);
if (f < m && v[f] < v[f + 1]) ++f;
if (v[f / 2] >= v[f]) break;
t = v[f / 2];v[f / 2] = v[f];v[f] = t;
f *= 2;
}
}
但这不起作用。谁能帮帮我?
该函数是堆排序的辅助函数。我将发布所有代码
static void
constroiHeap (int m, int v[])
{
int k;
for (k = 1; k < m; ++k) {
// v[1..k] é um heap
int f = k+1;
while (f > 1 && v[f/2] < v[f]) { // 5
troca (v[f/2], v[f]); // 6
f /= 2; // 7
}
}
}
static void peneira (int m, int v[]) {
int f=2, t;
while(f<=m){
count_Iteracoes_HeapSort++;
if(f<m && v[f] < v[f+1])++f;
if(v[f/2] >= v[f]) break;
t = v[f/2]; v[f/2] = v[f]; v[f] = t;
f *= 2;
}
}
void
heapsort (int n, int v[])
{
int m;
constroiHeap (n, v);
for (m = n; m >= 2; --m) {
troca (v[1], v[m]);
peneira (m-1, v);
}
}
int main{
int v0[6] = {0,63726,2323,0,32,236723};
heapsort_rec(5, v0);
}
输出:v0 = 0,32,2323,63726,236723
基本上,我需要我的输入是一个排序的数组,输出应该是有序的数组。
我需要递归实现这个 peneira 函数
【问题讨论】:
-
你能提供一些关于这个函数的用途的信息吗?
-
是作业还是类似的?
-
显示上下文,显示函数应该如何使用,定义目的,提供示例输入,即创建一个minimal reproducible example,使用tour 为您的个人资料做一些漂亮的装饰。
-
旁白:当
f可以等于m时,v[f+1]看起来很可疑。
标签: c recursion data-structures heapsort