Ir ao conteúdo
  • Cadastre-se

C Ordenação de numeros aleatorios


lsm19

Posts recomendados

Olá pessoal, estou precisando utilizar um algoritmo de ordenação(bubbleSort,mergeSort,etc) para organizar uma quantidade selecionada de numeros aleatorios, pode ser 10,50 ou 100000. Estou pegando os códigos de ordenação no Geekforgeeks, porém na hora de montar meu int main, selecionar a quantidade de numeros aleatorios que desejo e então chamar a função não estou conseguindo realizar. alguém poderia me dar uma mão? Lembrando que estou realizando em C.

 

Aqui o codigo do bubbleSort que eu peguei no geek:

// C program for implementation of Bubble sort
#include <stdio.h>
 
void swap(int* xp, int* yp)
{
    int temp = *xp;
    *xp = *yp;
    *yp = temp;
}
 
// A function to implement bubble sort
void bubbleSort(int arr[], int n)
{
    int i, j;
    for (i = 0; i < n - 1; i++)
 
        // Last i elements are already in place
        for (j = 0; j < n - i - 1; j++)
            if (arr[j] > arr[j + 1])
                swap(&arr[j], &arr[j + 1]);
}
 
/* Function to print an array */
void printArray(int arr[], int size)
{
    int i;
    for (i = 0; i < size; i++)
        printf("%d ", arr[i]);
    printf("\n");
}

 

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

@Leonan sm @Leonan sm    é bom que a função int main  fique no início do código , e as outras funções no final depois da main ,  e esse método de ordenação de vetores "bubbleSort" é  mais trabalhoso ,   que esse aqui :

void ancoraSort(int arr[], int n)
{
  for(   int   i=0;   i<n; i++)
    for( int   j=i+1; j<n; j++)
      if(arr[i] > arr[j])
      {
        int aux = arr[i];
        arr[i]  = arr[j];
        arr[j]  =    aux;
      }
}

 

e seu código ficou assim

 

// C program for implementation of Bubble sort
#include <stdio.h>
void bubbleSort(int arr[], int n   );
void ancoraSort(int arr[], int n   );
void printArray(int arr[], int size);
void printArray(int arr[], int size);
int main()
{
  int numeros_ale[] = {0,581,2,147,87,8,97,54,96,9,6,58,541,15,25,47,85,12,35};
                      /// vetor criado e preenchida para não precisar pegar os numeros do teclado
  int qtd = sizeof(numeros_ale) / sizeof(numeros_ale[0]); /// pega o tamanho do vetor

  bubbleSort(numeros_ale , qtd ); /// envia o vetor e o tamanho para a funCAo
  printf("\tCom bubbleSort:\n");
  printArray(numeros_ale , qtd );
  ancoraSort(numeros_ale , qtd );
  printf("\tCom ancoraSort:\n");
  printArray(numeros_ale , qtd );
  return 0;
}
void swap(int* xp, int* yp)
{
    int temp = *xp;
    *xp = *yp;
    *yp = temp;
}
// A function to implement bubble sort
void bubbleSort(int arr[], int n)
{
    int i, j;
    for (i = 0; i < n - 1; i++)
 
        // Last i elements are already in place
        for (j = 0; j < n - i - 1; j++)
            if (arr[j] > arr[j + 1])
                swap(&arr[j], &arr[j + 1]);
}
/* Function to print an array */
void printArray(int arr[], int size)
{
    int i;
    for (i = 0; i < size; i++)
        printf("%d ", arr[i]);
    printf("\n\n");
}
void ancoraSort(int arr[], int n)
{
  for(   int   i=0;   i<n; i++)
    for( int   j=i+1; j<n; j++)
      if(arr[i] > arr[j])
      {
        int aux = arr[i];
        arr[i]  = arr[j];
        arr[j]  =    aux;
      }
}

 

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

@Leonan sm, então você não fez nadinha exceto copiar do site um exemplo de ordenação?

 

Que tal escrever um programa ANTES para criar preencher e apagar um vetor com números. Podem ser constantes mesmo.

 

Que tal mudar seu primeiro programa para usar números aleatórios ao invés de constantes?

 

E que tal mudar seu segundo programa para afinal chamar essa função que copiou do  GFG e classificar os números e depois mostrar de novo os números já em ordem usando a função que mostra o vetor e que você escreveu no PRIMEIRO programa?

 

Essa é a maneira simples e normal de fazer isso.

  • Curtir 3
Link para o comentário
Compartilhar em outros sites

  • Membro VIP

 

Em 23/11/2022 às 21:53, Leonan sm disse:

[...] porém na hora de montar meu int main, selecionar a quantidade de números aleatórios que desejo e então chamar a função não estou conseguindo realizar

 

Só faltou comentar em qual parte não está conseguindo... 😄

 

Caso deseje, por favor, poste o código que tentou fazer e onde está com dúvidas... assim tentar entender o que poderia está errado lá e aproveitar para "aprender com os erros"...

 

 

Aproveitando a sugestão de código enviado pelo @devair1010,  segue:

 

Em 23/11/2022 às 23:12, devair1010 disse:
void bubbleSort(int arr[], int n   );
void ancoraSort(int arr[], int n   );
void printArray(int arr[], int size);
void printArray(int arr[], int size); //tá duplicado.. só remover essa linha

 

 

Sobre a execução (utilização) dos métodos que o@Leonan sm deseja..., inseri comentários no próprio código, vejam:
 

Em 23/11/2022 às 23:12, devair1010 disse:
  //seria bom exibir a vetor original antes de ordenar para ter uma referência;
  bubbleSort(numeros_ale , qtd); //obvervem que a função está ordenando o vetor em si (sugeriria apenas "retornar o vetor ordenando")
  printf("\tCom bubbleSort:\n");
  printArray(numeros_ale , qtd); //a semântica do nome da variável perde o sentido, pois o vetor "está ordenado". Concordam?
  
  ancoraSort(numeros_ale , qtd); //como citado acima, esse vetor já está ordenado... "não terá efeito tentar reordenar"
  printf("\tCom ancoraSort:\n");
  printArray(numeros_ale , qtd);
  
  return 0;

 

Resumindo:

Ou criaria cópias de vetores para enviar separadamente para cada função;

Ou ajustaria as funções para retornarem um vetor ordenada... sem mexer no vetor original. 

 

Em relação à semântica do nome da variável, seria tipo deixar apenas "numeros"... ou seja, o vetor ora estaria fora de ordem, ora estaria ordenado... mas deixando "_ale" fica sugerindo que ainda está ordenado... 🙂 

 

Só para exemplificar:
image.png

 

Por fim, esse código abaixo não é Bubble Sort. Veja por exemplo aqui (https://en.wikipedia.org/wiki/Bubble_sort) e compare.

 

Em 23/11/2022 às 21:53, Leonan sm disse:
// A function to implement bubble sort
void bubbleSort(int arr[], int n)
{
    int i, j;
    for (i = 0; i < n - 1; i++)
 
        // Last i elements are already in place
        for (j = 0; j < n - i - 1; j++)
            if (arr[j] > arr[j + 1])
                swap(&arr[j], &arr[j + 1]);
}

 

Seria semelhante... mas não é a mesma coisa... (entra na questão da semântica, ou seja, a ideia que "o nome das coisas meio que precisam representar aquilo que ele é").

 

  • Curtir 1
  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

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...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!