Ir ao conteúdo

Posts recomendados

Postado

Meu código já está fazendo as viradas no array, porém preciso printar na tela uma sequência de viradas que resulte na pilha ordenada. Por exemplo:

Exemplo 1

Exemplo de entrada:

5

5 1 2 3 4

Exemplo de Saída:

1 2 0

 

Exemplo 2

Exemplo de entrada:

5

5 4 3 2 1

Exemplo de Saída:

1 0

 

Meu código:

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

/* Inverte o array[0..i] */
void virar(int arr[], int i) { 
    int temp, start = 0; 
    while (start < i) 
    { 
        temp = arr[start]; 
        arr[start] = arr[i]; 
        arr[i] = temp; 
        start++; 
        i--; 
    } 
} 

//Retorna o índice do elemento máximo no array[0..n-1]  
int findMax(int arr[], int n) { 
    int mi, i; 
    for (mi = 0, i = 0; i < n; ++i) 
        if (arr[i] > arr[mi]) 
            mi = i; 

    return mi; 
} 

// A principal função que sorteia o array usando a função virar
void tapiocaSort(int *arr, int n) {  
    for (int curr_size = n; curr_size > 1; --curr_size) { 
        //Encontra o índice do elemento máximo do array[0..curr_size-1] 
        int mi = findMax(arr, curr_size);
        //Move o elemento máximo para o final da matriz atual, se ainda não estiver no final 
        if (mi != curr_size-1) { 
           //Para mover para o final do array, primeiro move-se o número máximo para o início  
            virar(arr, mi); 
            //Agora move o número máximo para o final, revertendo o array atual 
            virar(arr, curr_size-1); 
        } 
    } 
}  
//Função para imprimir o array de tamanho n
void printArray(int arr[], int n) 
{ 
    for (int i = 0; i < n; ++i) 
        printf("%d ", arr[i]); 
} 

int main() { 
    int n;
    scanf("%d", &n);
    
    int vetor[n];
    int size = 0;
    int value = 0;
    //enquanto conseguir ler valores antes de chegar no fim do arquivo
    while(scanf("%d ", &value) > 0) {
    vetor[size++] = value;
    } 
    
    tapiocaSort(vetor, n);
    puts("Sorted Array "); 
    printArray(vetor, n); 
    return 0; 
} 

 

Postado
// A principal função que sorteia o array usando a função virar
void tapiocaSort(int *arr, int n) {  
    int viradas = 0;
    for (int curr_size = n; curr_size > 1; --curr_size) { 
        //Encontra o índice do elemento máximo do array[0..curr_size-1] 
        int mi = findMax(arr, curr_size);
        //Move o elemento máximo para o final da matriz atual, se ainda não estiver no final 
        if (mi != curr_size-1) { 
           //Para mover para o final do array, primeiro move-se o número máximo para o início  
            virar(arr, mi); 
            viradas++;
            printf("%d ", viradas); 
            //Agora move o número máximo para o final, revertendo o array atual 
            virar(arr, curr_size-1); 
        } 
    } 
    printf("0\n"); 
            
}  

Alerta: isso não é aceito pelo ANSI C (não vai funcionar com todos os compiladores)

int n;
    scanf("%d", &n);
    
    int vetor[n];

 

 

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...