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

Ordenação recursiva de Vetor em c++


lucasoad399

Pergunta

Passando array por função recursivamente.

Estou fazendo um exercício de Deitel&Deitel e não estou conseguindo resolver um código:

Basicamente, devo fazer uma função que olha um vetor, procura o menor valor e poe na primeira posição. Após isso deve chamar a si mesma e olhar a segunda posição, até ordenar todo o vetor. Segue o que tentei até agora:

 

#include <iostream>

using namespace std;


void selectionSort(int vetor[], int limite, int comeco=0)
{
    int menor=vetor[comeco];
    int aux=0;
    int pos=0;


    for(int i=comeco; i<limite;i++)
    {
        if(menor>vetor[i])
        {
            menor=vetor[i];
            pos=i;
            break;

        }


    }

    aux=vetor[comeco];
    vetor[comeco]=menor;
    vetor[pos]=aux;

    comeco++;

    if(comeco<limite)
    {
        selectionSort(vetor, limite, comeco);
    }


}



int main()
{
    int limite=8;
    int array1[limite]={100,3,25, 103,104, 200,7,64};

    selectionSort(array1, limite);

    cout<<"ARRAYS ORDENADOS:\n";


    for(int i=0;i<8;i++)
        cout<<array1[i]<<"  ";
    cout<<endl;





    return 0;
}

Aparentemente o maior valor se replica tomando a posição do menor. Agradeço a ajuda e o empenho de quem conseguir. Estou há mais de 10h tentando.

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0
#include <stdio.h>
#include <stdlib.h>

#define SIZE 20 
#define SWAP( a, b ) (a) ^= (b) ^= (a) ^= (b)

void SelectionSortRec( int *vec, int size )
{
	static int n = 0;
	int menorV, menorI;
	
	int i;
	
	for(i = n; i < size; i++)
	{
		if( i == n )
		{
			menorV = vec[i];
			menorI = i;
		}
		
		if( vec[i] < menorV )
		{
			menorV = vec[i];
			menorI = i;
		}
	}

	if( vec[n] != menorV )
		SWAP( vec[n], vec[menorI] );
	
	n++;
	
	if( (n+1) != size )
		return SelectionSortRec( vec, size );
	else
		return;
}

int main()
{
	register int i;
	int vec[20] = {0};
	
	for(i = 0; i < 5; i++)
		vec[i] = rand() % 10;
	
	printf("Antes de ordenar\n");
	for(i = 0; i < 5; i++)
		printf("%d ", vec[i]);
	printf("\n");
	
	SelectionSortRec( vec, 5 );
	
	printf("Depois de ordenar\n");
	for(i = 0; i < 5; i++)
		printf("%d ", vec[i]);
	printf("\n");
	
	return (0);
}

 

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,1k
    • Posts
      651,8k
×
×
  • Criar Novo...