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 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?
    • By EREGON
      Bom dia,
       
      estou a tentar fazer um exercício para, dado um ficheiro .txt na directoria do programa, terei de encontrar todas as palavras que são palíndromos. Tendo este código para ler as palavras do ficheiro .txt (letra a letra) para uma matrix.
       
      Estando as palavras armazenadas numa matrix, como faço essa validação?
       
      Obg,
       
      #include <stdio.h> #include <stdlib.h> int main(int argc, char const *argv[]) { FILE* inp; inp = fopen("palindromo.txt","r"); char arr[100][50]; int i = 0; while(1){ char r = (char)fgetc(inp); int k = 0; while(r!=',' && !feof(inp)){ //Le ate fim de ficheiro arr[i][k++] = r; //armazena no array r = (char)fgetc(inp); } arr[i][k]=0; //ultimo carater nulo //Alguma parte aqui, valida se a palavra e PALINDROMO. //COMO?? if(feof(inp)){ //valida EOF break; } i++; } int j; for(j = 0;j<=i;j++){ printf("%s\n",arr[j] ); //Imprime array } return 0; }  
×

Important Information

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