Ir para conteúdo
Fórum Script Brasil
  • 0

Recursividade em SelectSort e InsertSort sem repetição


Alessandra Alves

Pergunta

Bom dia! Eu sou nova nesse fórum e preciso (desesperadamente) da ajuda de vocês. Eu estou começando a programar e ando tendo problemas. Essa semana eu comecei a programar em C++ e nosso professor nos passou um trabalho que eu não consegui fazer. O tópico é esse:

1) Implementar recursivamente em C ou C++ (não empregar repetição - decompor o problema)

a ) O método da seleção

b ) O método da inserção

Alguém aí pode me ajudar, por favor???

Obrigada,

Alessandra.

Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0

Bom ... não entende o porquê de restringir a instrução for, mas você pode substituir a instrução com o truque abaixo:

#include <stdio.h>

void method1()
{
    int i;

    for(i = 0; i < 10; i++)
    {
        printf("A");
    }
}

void method2()
{
    int i = 1;

repeat:
    printf("A");
    
    if(i++ < 10) goto repeat;
    else return;
}

int main()
{
    method1();
    printf("\n");
    method2();
}

A função method2() faz a mesma coisa que a função method1(), porém sem usar a instrução for.Boa Sorte.

Link para o comentário
Compartilhar em outros sites

  • 0
Bom ... não entende o porquê de restringir a instrução for, mas você pode substituir a instrução com o truque abaixo:

#include <stdio.h>

void method1()
{
    int i;

    for(i = 0; i < 10; i++)
    {
        printf("A");
    }
}

void method2()
{
    int i = 1;

repeat:
    printf("A");
    
    if(i++ < 10) goto repeat;
    else return;
}

int main()
{
    method1();
    printf("\n");
    method2();
}

A função method2() faz a mesma coisa que a função method1(), porém sem usar a instrução for.Boa Sorte.

Eu não entendi como esse código funciona :( Será que você poderia me explicar? Por favor...

Link para o comentário
Compartilhar em outros sites

  • 0

Vou tentar te explicar ... Você disse que seu professor restringiu o uso da instrução for, o que eu quis te mostrar é como substituir essa instrução.Vou explicar o que eu fiz com a função method1():

.Localizei a instrução for.

.Substitui a instrução for por um rótulo.

.Coloquei o código que ira se repetir "dentro" do rótulo.

.Usei a instrução goto para repetir este "bloco" de código.

.Inicializei as variaveis necessárias antes da declaração do rótulo.

.Coloquei o código que encerra o ciclo no final do rótulo.

Para que você entenda melhor, eu implementei duas funções: selectionSort() e selectionSort1(),as duas são recursivas e somente a primeira faz uso da instrução for, contudo ambas conseguem ordenar um vetor de inteiros.

#include <stdio.h>

void selectionSort(int *input, int length, int startIndex)
{
    if(startIndex >= length - 1) return;
    
    int minIndex = startIndex;
    
    for(int index = startIndex + 1; index < length; index++)
    {
        if (input[index] < input[minIndex])
        {
            minIndex = index;
        }
    }
    
    int temp = input[startIndex];
    input[startIndex] = input[minIndex];
    input[minIndex] = temp;
    
    selectionSort(input, length, startIndex + 1);
}

void selectionSort1(int *input, int length, int startIndex)
{
    if(startIndex >= length - 1) return;
    
    int minIndex = startIndex;
    
// start loop for
    
    int index = startIndex + 1;

repeat:
    if (input[index] < input[minIndex])
    {
        minIndex = index;
    }
    
    if(++index < length) goto repeat;

// end loop for

    int temp = input[startIndex];
    input[startIndex] = input[minIndex];
    input[minIndex] = temp;
    
    selectionSort(input, length, startIndex + 1);
}



int main()
{
    int input[]  = {9, 3, 4, 2, 7, 5, 1, 6, 0, 8};
    int input1[] = {9, 3, 4, 2, 7, 5, 1, 6, 0, 8};

    selectionSort(input, 10, 0);
    printf("{%d, %d, %d, %d, %d, %d, %d, %d, %d, %d}\n", input[0], input[1], input[2], input[3],
         input[4], input[5], input[6], input[7], input[8], input[9]);

    selectionSort1(input1, 10, 0);
    printf("{%d, %d, %d, %d, %d, %d, %d, %d, %d, %d}", input1[0], input1[1], input1[2], input1[3],
         input1[4], input1[5], input1[6], input1[7], input1[8], input1[9]);

    return 0;
}

Link para o comentário
Compartilhar em outros sites

  • 0
Vou tentar te explicar ... Você disse que seu professor restringiu o uso da instrução for, o que eu quis te mostrar é como substituir essa instrução.Vou explicar o que eu fiz com a função method1():

.Localizei a instrução for.

.Substitui a instrução for por um rótulo.

.Coloquei o código que ira se repetir "dentro" do rótulo.

.Usei a instrução goto para repetir este "bloco" de código.

.Inicializei as variaveis necessárias antes da declaração do rótulo.

.Coloquei o código que encerra o ciclo no final do rótulo.

Para que você entenda melhor, eu implementei duas funções: selectionSort() e selectionSort1(),as duas são recursivas e somente a primeira faz uso da instrução for, contudo ambas conseguem ordenar um vetor de inteiros.

#include <stdio.h>

void selectionSort(int *input, int length, int startIndex)
{
    if(startIndex >= length - 1) return;
    
    int minIndex = startIndex;
    
    for(int index = startIndex + 1; index < length; index++)
    {
        if (input[index] < input[minIndex])
        {
            minIndex = index;
        }
    }
    
    int temp = input[startIndex];
    input[startIndex] = input[minIndex];
    input[minIndex] = temp;
    
    selectionSort(input, length, startIndex + 1);
}

void selectionSort1(int *input, int length, int startIndex)
{
    if(startIndex >= length - 1) return;
    
    int minIndex = startIndex;
    
// start loop for
    
    int index = startIndex + 1;

repeat:
    if (input[index] < input[minIndex])
    {
        minIndex = index;
    }
    
    if(++index < length) goto repeat;

// end loop for

    int temp = input[startIndex];
    input[startIndex] = input[minIndex];
    input[minIndex] = temp;
    
    selectionSort(input, length, startIndex + 1);
}



int main()
{
    int input[]  = {9, 3, 4, 2, 7, 5, 1, 6, 0, 8};
    int input1[] = {9, 3, 4, 2, 7, 5, 1, 6, 0, 8};

    selectionSort(input, 10, 0);
    printf("{%d, %d, %d, %d, %d, %d, %d, %d, %d, %d}\n", input[0], input[1], input[2], input[3],
         input[4], input[5], input[6], input[7], input[8], input[9]);

    selectionSort1(input1, 10, 0);
    printf("{%d, %d, %d, %d, %d, %d, %d, %d, %d, %d}", input1[0], input1[1], input1[2], input1[3],
         input1[4], input1[5], input1[6], input1[7], input1[8], input1[9]);

    return 0;
}

Agora eu entedi! Muitíssimo obrigada!

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...