Ir para conteúdo
  • 0
Gu_Killer

Ordenção por seleção em C

Pergunta

Implementar o algoritmo da ordenação por seleção e incorporar no código um contador que retorne quantas comparações foram feitas e um contador que retorne quantas atribuições foram feitas.

 

O programa principal deve criar uma sequência aleatória de 1000 posições e então ordenar a sequência. Deve-se imprimir a sequência original, a sequência ordenada e os contadores de comparações e atribuições.

 

Para o upload, deve ser enviado um único arquivo .c não compactado... Arquivos com extensão .zip .rar e etc serão desconsiderados.

Não consigo fazer a inserção


 

#include <stdio.h>
#include <stdlib.h>
#define SIZE 1000

typedef int TipoIndice;

typedef struct item
{
    TipoIndice chave;
    int dado;
} TipoItem;


void insercao(TipoItem *A, TipoIndice n)
{
    TipoIndice i,j,Min;
    TipoItem x;
    for (i=0; i <= n-1; i++)
    {
        Min=i;
        for (j=i+1; j<n; j++)
            if (A[j].chave < A[Min].chave)
                Min = j;
        x = A[Min];
        A[Min] = A;
        A = x;
    }
}

void imprime(TipoItem *A, TipoIndice n)
{
    int i;
    for (i = 0; i < n; i++)
        printf("%d(%d) ", A.chave, A.dado);
}

void preenche(TipoItem *A, TipoIndice n)
{
    int i;
    srand ( time(NULL) );
    for (i = 0; i < n; i++)
    {
        A.chave = rand()%SIZE;
        A.dado = i;
    }
}

int main()
{
    TipoItem *vetor = malloc(sizeof(TipoItem)*SIZE);
    preenche(vetor,SIZE);
    insercao(vetor,SIZE);
    imprime(vetor,SIZE);
    system("pause");
    return 0;
}


 

Editado por Alaerte Gabriel
Adição da tag CODE

Compartilhar este post


Link para o post
Compartilhar em outros sites

0 respostas a esta questão

Recommended Posts

Até agora não há respostas para essa pergunta

Crie uma conta ou entre para comentar

Você precisar ser um membro 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

  • Conteúdo Similar

    • Por darkskull10
      Numa cidade as crianças costumam brincar com um jogo (de dois jogadores) onde:
      um jogador A define uma sequência de 10 letras usando: G, R e B (exemplo: G – G – G – R – B – R – B – B – B – R)
      um jogador B pode ler a sequência quantas vezes quiser
      o jogador B também pode dizer uma das letras e obter em quais posições a letra dada se encontra na sequência
      o jogador B também pode dar uma posição e saber qual letra ocupa a posição na sequência
      para finalizar, o jogador B deve dizer a sequência de letras, obtendo um ponto para cada acerto.
       
      Só consegui pensar nisso por enquanto.
       
      //identificar que letra ocupa esta posição na sequência:
      do{
      scanf(“%d”,&Posicao);
      Posicao=Posicao-1;}
      while ((Posicao<0)||(Posicao>9));
      printf(“%c”,Sequencia[Posicao]);
       
      //exibir sequencia
      for (Cont=0; Cont<=9; Cont++)
      printf(“%c”,Sequencia[Cont]);
       
      //exibir posições
      for (Cont=0; Cont<=9; Cont++)
      printf(“%d%c”,Cont+1,Sequencia[Cont]);
    • Por 1alexs2
      Eu tenho um"programa php que me ajuda a gerenciar as vendas.
      O programa organiza as vendas por total de venda e por cliente.
      Uma das listagens que o programa fornece é quem fez encomenda nos últimos 720 dias. (exemplo: (há) 1 dia ---- Maria --- 70,00 € ;  2 dia --- Pedro --- 50 €, etc... até 720 dias

      No entanto o programa tem um bug que não consigo identificar. Ele ordena os clientes / vendas, mas a ordenação não começa em 1 até 720, mas sim em 010, 011, 012,  .... 02, 021 022, 023 .... 03, 031, 034
      Eu olhei e olhei e não consigo descobrir onde está o problema. Você poderia me ajudar?
      Arquivo php em pdf: https://we.tl/t-D4xTtG3Ync
      obrigado
    • Por EduardoLenz
      Olá, pessoal,
       
      Mexo com microcontroladores, antigamente com PIC e agora com ARM (plataforma LPCXpresso). 
      Ambos utilizam a linguagem C. 
       
      Meu problema é o seguinte: Preciso converter um caractere que vem da UART (porta de comunicação). No PIC havia uma função pronta para tal, no ARM não. 
       
      O caractere chega assim, por exemplo: P123 (tudo junto), e eu queria separar em:
      dado_recebido[]={'P', '1', '2', '3'}; 
      Para poder utilizar um switch 
      switch(dado_recebido[0])
      {
      case 'P':....
      }
       
      alguém tem alguma ideia de como posso fazer a conversão? 
       
      Agradeço desde já. 
    • Por Caioba
      Salve! Estou com problemas ao solucionar uma questão que me foi proposta na linguagem C. Já desenvolvi todo o código, mas os casos de teste não batem.
       
      Questão: 
      A agência cearense para investigações criminais denominada OBI (Operação de Baita Investigação) notou que, a exemplo do que ocorreu na Petrobrás, muito dinheiro foi desviado dos cofres públicos do estado para pagamento de propina a políticos nos últimos anos, especialmente pelo partido QU (Quadrilha Unida).
      A investigação está em andamento e a agência recrutou você para converter alguns valores que ficaram com caracteres estranhos após terem sidos descriptografados dos arquivos originais. Sua tarefa neste caso é relativamente simples: basta retirar todos os caracteres estranhos (não numéricos) de cada um dos dois valores disponíveis. Apenas tome o cuidado de separar os primeiros 11 dígitos do primeiro valor. Eles correspondem ao CPF do corrupto :)
      Entrada: A entrada é composta por duas linhas, cada uma delas contendo entre 1 e 60 caracteres ('0'-'9' e outros caracteres não numéricos ou, pelo menos, 1 caracter '0'-'9') e no máximo um ponto ".". Desconsiderando os caracteres não numéricos, o número final não deve ter mais de 17 caracteres (incluindo o ponto decimal).
      Exemplo de entrada:
      7a5a6adfg4a4adsfgsd9fg6aa904aa91#$%1
      42**&7746.67abc$
      Saída: Imprima o CPF do corrupto e o valor que foram desviados dos cofres públicos.
      Exemplo de saída
      cpf 75644969049
      propina 11427746.67
       
      Meu código abaixo:
      #include<stdio.h> #include<string.h> int main(){ char caract[60]; char caract2[60]; char cpf[10]; char propina[15]; int i=0, j=0; scanf("%s", caract); for(i = 0; caract[i] != '\0'; i++){ if(caract[i] >= 48 && caract[i] <= 57){ if(j<11){ cpf[j] = caract[i]; } j++; } } cpf[11] = '\0'; cpf[12] = '\0'; scanf("%s", caract2); for(i = 0; caract2[i] != '\0'; i++){ if((caract2[i] >= 48 && caract2[i] <= 57) || caract2[i] == 46){ propina[j] = caract2[i]; j++; } } cpf[10] = '\0'; printf("cpf %s", cpf); printf("propina %s", propina); }  
    • Por TutoDS
      Boa tarde pessoal.
      Sou novo a programar em C, programo diariamente em PHP e já programei em C#.
      Porém agora tenho que fazer um projeto para a minha Licenciatura em C, um programa estilo Via Verde.
      Mas estou com dificuldades, pois o meu pensamento está mais virado para Base de Dados.
      Se alguém me puder tirar as seguintes dúvidas agradeço:
      Como recomendam estruturar os ficheiros para guardar os dados do cliente, os veículos e as viagens? Como posso fazer a pesquisa num ficheiro, por exemplo inserir 123456789 e aparecer me os dados do cliente com esse NIF? Obrigado
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.