Jump to content
  • 0
Gu_Killer

Ordenção por seleção em C

Question

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;
}


 

Edited by Alaerte Gabriel
Adição da tag CODE

Share this post


Link to post
Share on other sites

0 answers to this question

Recommended Posts

There have been no answers to this question yet

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By Izaac Borges
      Boa noite, me chamo Izaac Borges, acabei de começar aqui. Eu estava procurando um fórum de tecnologia onde eu pudesse encontrar gente disposta a me dar algumas dicas. Estou começando a programar agora, sempre gostei da ideia de programar, já tive algumas experiencias programando código para ,Arduíno coisas bem básicas mas agora estou estudando para valer e escolhi a linguagem C para começar pois já conhecia um pouco dela.
       
      Porem agora estou querendo fazer um sistema simples, onde ele armazena os seus dados(no caso seriam números de jogos da loteria) e  depois você insere os números sorteados e ele diz quantos acertos você fez em cada jogo. Gostaria de saber se é possível fazer esse tipo de programa em C e se eu iria precisar de alguma outra tecnologia para banco de dados, se sim qual tecnologia recomendam para quem está iniciando e quer aprender fazendo pequenos projetos como esse.
    • By vitorianatalia
      Sou iniciante em linguagem C e estou tentando resolver um exercício, mas não estou conseguindo. O enunciado é: 
      Considerando a fórmula para o cálculo da distância entre dois pontos (x1, y1) e (x2, y2): a) Escreva uma função que receba como parâmetros as coordenadas de dois pontos e retorne a distância entre eles. b) Escreva um programa em C (função principal) que capture do teclado as coordenadas dos 3 vértices de um triângulo, calcule e imprima o perímetro deste triângulo, chamando a função anterior. c) Teste seu programa, simulando sua execução com as seguintes coordenadas: (4,1), (1,1), (4,5).
       
      Para resolver a a), simplesmente não conseguia nomear g como distancia que dava erro lvalue required as left operand of assignment. Para b), sei que preciso rodar a função distancia para obter os resultados de 3 contas diferentes, mas como consigo armazenar isso para somar em main depois?

       
      #include <stdio.h> #include <stdlib.h> #include <math.h> float distancia (float xa, float xb, float ya, float yb, float g) {     g = sqrt(pow((xb-xa),2)+pow((yb-ya),2));     return g; } int main() {     float x1, x2, y1, y2, g;     // distancia entre dois pontos      printf("Insira valor de x1 e x2: \n");     scanf("%f %f", &x1, &x2);     printf("Insira valor de y1 e y2: \n");     scanf("%f %f", &y1, &y2);     printf("A distancia entre os dois pontos e: %f", distancia(x1, x2, y1, y2, g));         return 0; }  
    • By CiCLON3
      Preciso criar um programa que faça 3 execuções:
      A soma de todos os números pares não primos que antecedem N; A soma de todos os números ímpares não primos que antecedem N; A soma de todos os números primos que antecedem N.    Mas não sei como, sei imprimir os primos, pares e impares ate n, mas fazer a soma não.
    • By cris4ds
      Olá pessoal tudo bem? Bom, sou nova em programação com C e preciso fazer um programa que leia um número pelo teclado e o usuário deve informar se o número é em segundos, minutos ou horas. Se for em segundos, o programa deve mostrar eles convertidos em minutos e horas, se for em minutos deve mostrar eles em segundos e horas, e se for em horas deve mostrar em segundos e minutos. 
      tentei dessa maneira, mas não sei como colocar um variável char dentro de uma condição [if/else]. 
      aqui esta o código:
      #include<stdio.h> #include<stdlib.h> int main(){ int valor, h, m, s; char usu = '?'; printf("Digite um valor: "); scanf("%d", &valor); printf("O valor digitado corresponde a horas[h], minutos[m] ou segundos: "); scanf("%c", &usu); h = valor/3600; m = (valor%3600)/60; s = valor%60; if(strcmp(usu, "h")== 0){ printf("Você escolheu HORAS."); printf("O valor digitado corresponde a %d minutos e %d segundos.", m, s); }else{ if(strcmp(usu, "m")== 1){ printf("Você escolheu MINUTOS."); printf("O valor digitado corresponde a %d horas e %d minutos.", h, s); }else{ if(strcmp(usu, "s")== 2){ printf("Você escolheu SEGUNDOS."); printf("O valor digitado corresponde a %d horas e %d minutos.", h, m); }else{ } } } getchar(); }  
    • By Dan Borges
      Olá,
       
      Tenho conhecimentos em C#, e ultimamente venho programando utilizando o MonoGame para desenvolver jogos. Estava procurando como é feito uma pista pseudo 3D, e achei esse artigo em JS: https://codeincomplete.com/posts/javascript-racer-v1-straight/
       
      Por ter a lógica de programação da mente, mesmo sem saber js, entendi parte do código, mas esse trecho, não:
      segments = []; for(var n = 0 ; n < 500 ; n++) { // arbitrary road length segments.push({ index: n, p1: { world: { z: n *segmentLength }, camera: {}, screen: {} }, p2: { world: { z: (n+1)*segmentLength }, camera: {}, screen: {} }, color: Math.floor(n/rumbleLength)%2 ? COLORS.DARK : COLORS.LIGHT }); } A primeira vista entendi que ele está adicionando valores ao array segments com o método push. Mas, os valores colocados, não fazem sentido para mim.
      É como se fosse criada uma classe dinamicamente (que contenha as variáveis:, index, p1, p2...) sem precisar declará-la.
      Seria basicamente isso? Ele criou um objeto que representa uma classe, mas sem nomeá-la, ou algo semelhante?
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.