que je dois mettre en œuvre une version récursive de cette fonction:Comment mettre en œuvre une version récursive de cette fonction
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;
}
}
que je faisais quelque chose comme ceci:
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;
}
}
Mais cela ne fonctionne pas. Quelqu'un peut-il m'aider?
Cette fonction est une fonction auxiliaire du tri de tas. Je signalerai tout le code
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);
}
Sortie: v0 = 0,32,2323,63726,236723
Fondamentalement, je besoin de mon entrée est un tableau et la sortie triée doit être le tableau ordely.
J'ai besoin de mettre en œuvre cette fonction Peneira dans une récursif loin
Pouvez-vous donner des informations sur le but de cette fonction? – Meccano
Est-ce un devoir ou similaire? – Yunnosch
Montrez le contexte, montrez comment la fonction est supposée être utilisée, définissez le but, donnez un exemple d'entrée, c'est-à-dire créez un [mcve], prenez le [tour] pour une jolie décoration de votre profil. – Yunnosch