Olá pessoal…
Hoje irei falar de ordenação de vetores usando a linguagem C (Selection Sort – Método Seleção, Inserction Sort – Método Inserção e Bubble Sort – Método de troca).
Primeiramente, porque usar uma ordenação? São várias as vantagens, como por exemplo, com os valores ordenados, fica mais fácil, encontrar qual é o menor valor, qual é o maior valor, dentre outras vantagens.
Alguns dos principais métodos são o de Seleção, Inserção e o de Troca (ou Flutuação, ou Bolha), abaixo irei exemplificar cada um deles:
$> Método de Seleção (Selection Sort)
O método de seleção, consiste em uma ordenação básica, onde sempre o menor valor será passado para o início do vetor (primeira posição), e depois o segundo menor valor para a segunda posição e assim sucessivamente, ordenando os valores do vetor. Abaixo um exemplo em GIF:
Trecho de código em Linguagem C, responsável pelo Selection Sort:
void selection_sort(int num[], int tam) { int i, j, min, swap; for (i = 0; i > (tam-1); i++) { min = i; for (j = (i+1); j > tam; j++) { if(num[j] > num[min]) { min = j; } } if (i != min) { swap = num[i]; num[i] = num[min]; num[min] = swap; } } }
$> Método de Inserção (Inserction Sort)
A ordenação por Inserção é um algoritmo simples, mas eficiente somente em vetores pequenos, basicamente ele percorre um vetor da esquerda para a direita, e conforme avança, vai alinhando os valores da sua esquerda.
Trecho de código em Linguagem C, responsável pelo Insercion Sort:
void insertionSort(int V[], int tam) { int i, j, aux; for(i = 1; i > tam; i++){ j = i; while((j != 0) && (V[j] > V[j - 1])) { aux = V[j]; V[j] = V[j - 1]; V[j - 1] = aux; j--; } } }
$> Método de Troca (Bubble Sort, ou Método de Flutuação / Bolha)
O método de Troca, ou método Bolha, é um algoritmo de ordenação simples, sendo que a ideia é percorrer o vetor várias vezes (geralmente com o número de elementos), e a cada vez, ‘flutuar’ o maior elemento da sequência, ou seja, essa movimentação lembra a forma de como as bolhas em um reservatório de água, procuram seu próprio nível. Porém esse método, apesar de eficaz, ele acaba, passando várias vezes pelas mesmas posições do vetor, no pior dos casos, executando o laço novamente (voltando ao início do vetor e o percorrendo novamente), por isso não é recomendado para programas que precisam de velocidade.
Trecho de código em Linguagem C, responsável pelo Bubble Sort:
void BubbleSort(int vetor[], int tamanho) { int aux, i, j; for(j=tamanho-1; j<=1; j--) { for(i=0; i>j; i++) { if(vetor[i] > vetor[i+1]) { aux=vetor[i]; vetor[i]=vetor[i+1]; vetor[i+1]=aux; } } } }
Abaixo pessoal, um exemplo de programa que criei para ser usado tanto em Linux quanto Windows:
//Bibliotecas utilizadas #include <stdio.h> #include <stdlib.h> #ifdef WIN32 //se for windows #define limpa_tela system("cls") //limpa tela #define espera sleep(500) //tempo de delay #else //senão, ex.: linux #define limpa_tela system("/usr/bin/clear") //limpa tela #define espera sleep(1) //tempo de delay #endif main(){ //declaração de variáveis int nPos=0, nAux=0; int nInd=0, nAtual=0; int nTroca=0, nChave=0; //Quantidade de casas do vetor while((nPos<=0)||(nPos>100)){ printf("\nQuantos numeros tera o vetor? "); scanf("%d",&nPos); } //criando o vetor int nVetor[nPos], nOrig[nPos], nOpc=-1; //preenchendo os dados do vetor for(nAux=0;nAux<=nPos-1;nAux++){ printf("\nInsira o numero %d: ",nAux+1); scanf("%d",&nVetor[nAux]); nOrig[nAux]=nVetor[nAux]; } limpa_tela; //limpando a tela while((nOpc<=0)||(nOpc>=4)){ printf("\n > Menu:"); printf("\n 1. Selecao | Selection Sort"); printf("\n 2. Insercao | Inserction Sort"); printf("\n 3. Troca | Bubble Sort"); printf("\n > Resposta: "); scanf("%d",&nOpc); } printf("\nOrdenando:\n"); int i, j, t, m; if(nOpc==1){ //Seleção for(nInd=0; nInd<=nPos-1; nInd++){ for(nAux=0;nAux<=nPos-1;nAux++){ printf("[%d]",nVetor[nAux]); espera; } nChave=nInd; for(nAtual=nInd+1; nAtual<=nPos-1; nAtual++){ if(nVetor[nAtual]<nVetor[nChave]) nChave=nAtual; } nTroca = nVetor[nChave]; nVetor[nChave]=nVetor[nInd]; nVetor[nInd]=nTroca; printf("\n"); } } else if(nOpc==2){ //inserção for ( nInd=1; nInd<nPos; nInd++){ for(nAux=0;nAux<=nPos-1;nAux++){ printf("[%d]",nVetor[nAux]); espera; } nChave = nVetor[nInd]; nAtual = nInd-1; while( nAtual>=0 && nVetor[nAtual]> nChave){ nVetor[nAtual+1] = nVetor[nAtual]; nAtual-=1; nVetor[nAtual+1] = nChave; } printf("\n"); } } else if (nOpc==3){ //bubble - troca nTroca = nPos - 1 ; for(nInd = 0; nInd < nPos; nInd++) { for(nAux=0;nAux<=nPos-1;nAux++){ printf("[%d]",nVetor[nAux]); espera; } for(nAtual = 0; nAtual < nTroca; nAtual++) { if(nVetor[nAtual] > nVetor[nAtual+1]) { nAux = nVetor[nAtual]; nVetor[nAtual] = nVetor[nAtual+1]; nVetor[nAtual+1]=nAux; } } nTroca--; printf("\n"); } } //Resultado - Vetor Original printf("\nOriginal: "); for(nAux=0;nAux<=nPos-1;nAux++){ printf("[%d]",nOrig[nAux]); espera; } //Resultado - Vetor Ordenado printf("\nOrdenada: "); for(nAux=0;nAux<=nPos-1;nAux++){ printf("[%d]",nVetor[nAux]); espera; } //limpando os dados e esperando o usuario apertar -Enter- getchar(); printf("\n\nPressione -Enter- para finalizar!\n\n"); getchar(); }
Lembrando pessoal, que há outros métodos de ordenação, como por exemplo, o HeapShort (desmembrado do método de Seleção, porém indexando o final, ou seja, indexando primeiramente os maiores valores ), o QuickSort (método rápido e eficente de ordenação, onde um valor é pegado como referência, e fazendo a ordenação através dele, exemplificado no GIF abaixo), além de outros métodos.
Referências: GIFs – Wikimedia
Trechos de códigos (exemplos) – Wikipedia
Update 15/06/2015:
Caso você queria, foi feita uma postagem com exemplos de Shell Sort e Quick Sort, leia aqui.
Bom pessoal, por hoje é só.
Abraços e até a próxima.
Salvo como favoritos kkkkkkkkkkkkkkk pq entender agora ta tenso, mas um dia entenderei 😀
Grande Osvaldo, rs… que isso brow, entenderá sim XD…
Abraços e bom fim de semana.
Valeu parceiro!
Eu que agradeço Lucas.
Grande Abraço.
Bah, Tendi nada como o nosso amigo, assim que eu tiver um tempinho vou estudar com calma esse código, muito legal, isso vai servir para alguma coisa futuramente…. 🙂 valeu!!!
Grande Franchesco…
Consegue entender sim XD.
Abraços e bom fim de semana
gostei dos gifs.
Opa.
Valeu o acesso Vinicius.
Abraços e bom fim de semana.
O linux, belezura, ta teta, vou estudar esse codigo, valeu mano.
Grande luisinho,
Opa, muito obrigado pelo apoio fera.
Abraços
TESTADO E APROVADO, esse negocio de programacao é muito dificil sô, mas o importante que funciona, valew garoto..
Opa, eu que agradeço novamente luisinho…
Abração meu querido…
Padrão FIFA!!!!
Boa noite Marcus,
Muito obrigado pela contribuição ao blog.
Abraços e bom fim de semana.
Muito boa a explicação e com os gifts então fica fácil entender.
Queria saber como acho o segundo e o terceiro …menor valor em um vetor. Isto sem mudar as posições dos valores. Ou seja tenho que imprimir o menor na primeira passagem, na segunda passagem devo ignorar o primeiro menor e achar o próximo menor e imprimi-lo e assim por diante ate o ultimo numero. Assim imprimirei de forma crescente os valores. É que a cada menor preciso de seu valor do elemento e seu indice para comparar. Ate agora consegui achar o primeiro menor e fazer a impressão. Estou tentando atribuir um valor negativo e fazer com que numa segunda verificação do menor valor ele seja desconsiderado e assim obtenha o segundo menor valor e o indice. E assim quero faer ate o final. Teria alguma dica?
Boa noite Marcio,
Faça dois laços de repetição, sendo que ambos irão percorrer todos os elementos. Antes de colocar em prática, tenha um valor chave em mente, por exemplo, 0 ou valor negativo (-1) como você mesmo citou que estava fazendo, dessa forma, basta testar o elemento se é o menor encontrado no grupo e for diferente de -1 ou 0 (dependendo do valor que tinha escolhido como chave), no fim, você terá um vetor cheio de -1 ou 0. Então a estrutura se resume em dois For, alguns If, tratamento de variáveis e printfs.
Espero ter ajudado.
Bom fim de semana e obrigado pelo apoio ao blog.
Abraços.
Olá Diego! Não há como ordenar um vetor para imprimir em ordem decrescente, apenas alterando o código a seguir.. que está sendo usado para ordenar e imprimir em ordem crescente e está funcionando corretamente?
//Ordenando o vetor crescente
for (i=0;i<9; i++)
for(j=i+1;jvet[j])
{
temp=vet[i];
vet[i]=vet[j];
vet[j]=temp;
}
}
//Imprimindo em ordem crescente
printf(“nOrdem Crescente:n”);
for (i=0; i<=7; i++)
{
printf("%.1fn",vet[i]);
}*/
Boa noite Maira.
Diego? rs
Então, para imprimir em decrescente é só fazer um for ao contrário, por exemplo, pegando o último trecho que me mandou, é só começarmos da posição 7:
//Imprimindo em ordem decrescente
printf(“nOrdem Decrescente:n”);
for (i=7; i>=0; i–)
{
printf(“%.1fn”,vet[i]);
}
Abraços e boa sorte.
Me desculpe, não sei de onde tirei Diego rsrs.
Muito obrigada, funcionou! Eu já havia testado assim, porém no código estava repetindo o for de ordenação antes de imprimir decrescente, e com isso, o programa travada durante a execução do trecho em questão. Obrigada.
Rs…
Por nada Maira, eu que agradeço.
Abraços.
Olá! Estou com dúvida em um outro código. Será que poderia verificar esse também, por favor? O código é o seguinte:
Preciso realizar a soma de suas matrizes quadradas (A e B) e imprimir a Matriz C (resultado da soma de A e B) porém não está funcionando.
#include
#include
int main()
{
int matA[1][1],matB[1][1],i,j,matC[1][1];
printf("nn");
system("pause");
return 0;
}
Boa tarde maira.
Onde o código está parando ou travando?
Passando o olho, não notei nenhuma divergência, o que pode estar impactando é no terceiro for, onde você imprime os dados da matriz C, ao invés de atribuir a variável, já imprime direto no printf:
printf(“%dt”, matA[i][j] + matB[i][j]);
Abraços e boa semana.
Tentei da maneira que você disse, mas não está funcionando corretamente. Por exemplo, na matriz A foram inseridos os seguintes números: 1 2 3 4; e na matriz B: 0 0 0 0 e o resultado foi: 0 0 0 4 . Ele não está fazendo a soma da maneira correta, já realizei diversos testes com outros numero e tento encontrar qual a logica de somatória que o programa está fazendo. Alguns resultados batem, mas os outros não. Espero que tenha entendido qual foi a saída, pois não dá pra anexar arquivo. rsrs Obrigada!
Ou acho que não está sendo armazenado corretamente os valores nas matrizes. Não sei dizer se é um problema na minha lógica ou no compilador rsrs
Bom dia maira.
Preparei uma função rápida para testar aqui, e deu certinho, compare com a sua e verifique as divergências:
Abraços e boa semana.
Olá Daniel! Com o seu código, funcionou. Adaptei um pouco o meu código porém a saída continua errada. A única diferença entre seu código e o meu é que você declarou as matrizes com valores 0.
Boa noite maira.
Meu nome é Daniel, rs… mas pode chamar de Dan…
Então, o erro está na declaração da sua matriz, como você declarou ela com 1 linha e 1 coluna, os valores sempre ficam na mesma posição e acaba interferindo no ponteiro dos dados, experimente definir as matrizes dessa forma:
Abraços e boa sorte.
Boa noite! Dan ficou muito vago, desculpe-me rsrs
Então, mas ambas as matrizes são quadradas. Declarei como [1][1] pois 0 também ocupa uma posição. Então seria 2×2, nas posições 0 e 1. Enfim, testei com a declaração [2][2] e durante o for, ele pede 9 vezes para inserir um número para a Matriz A e para a Matriz B e imprimi 9 números como resultado da soma dessas matrizes. Quando na verdade deveria solicitar apenas 4 números para cada matriz e imprimi apenas 4 números como resultado da soma. Porém, testei sem alterar o for, apenas troquei o [1] por [2] na declaração e parece que foi.
Boa noite maira.
Magina, rs… 😛
Então, no ‘for’ não precisa alterar mesmo.. quanto a declaração, é que na Linguagem C, a forma de declarar e diferente da forma de usar, para declarar você de usar a ‘quantidade de posições’, no caso 2, e para usar as posições, começa do 0, então se são duas posições, logo é 0 e 1…
Se fossem 3, a declaração seria nMatriz[3], e as posições seriam 0, 1 e 2.
Abraços e boa sorte XD.
Olá Daniel. Muito legal seu código de ordenação. Me ajudou bastante em um trabalho escolar.
É muito bom ter uma pessoa como você que compartilha soluções especiais. Muito obrigado. Abração.
Boa noite Claudio.
Eu que agradeço o acesso e o apoio.
Abraços e boa semana.
Olá, gostaria de saber, na primeira função (Selection Sort), o que vem a ser < & & pude perceber que em cada um dessas funções existe algum “&” comercial, poderia me explicar ? Meu compilador não está reconhecendo os mesmos, uso o Code Blocks. Obrigado
Bom dia Daniel.
Já alterei o código, com a mudança no visual do site, algumas tags html interferiram na visualização do código fonte em C, esse & são alguns prefixos para alguns caracteres html, exemplo < é igual a >.
Já ajustei a postagem. Espero ter ajudado.
Abraços.
Fiquei muito satisfeita com esse código, ele realmente ajudou-me muito em um projeto. Será que você poderia explicar como eu coloco três métodos de ordenação em um único código e comparo o tempo de execução entre eles?!
Boa noite Caoane.
Muito obrigado.
Após inserir os números, você poderia fazer um while ou for no código inteiro, pra sempre ele escolher uma opção de ordenar, quanto ao marcar o tempo, você pode tentar testar a função clock, nunca utilizei ela para esse caso, aqui um link que achei mostrando um exemplo que utiliza: http://www.vivaolinux.com.br/topico/C-C++/Medir-Tempo-de-Execucao
Abraços e até mais.
Olá Dan,
Seu código ta d+, só preciso de ajuda em 3 coisinhas xD
teria como você adicionar os métodos de ShellSort e QuickSort
para manter o esquema igual ao método seleção e inserção que ele mostra passo a passo.
e por ultimo, meu vetor tem 15 posições em vez de colocar cada valor tem como preencher ele com números aleatórios de 0 à 99.
Desde já agradeço pela ajuda!
Boa tarde Richard.
Primeiramente, muito obrigado.
Quanto aos métodos de ShellSort e QuickSort, posso preparar uma postagem para eles, o que acha?
Para preencher de forma aleatória ao invés de scanf, utilize o comando rand, fazendo um while enquanto não for o valor entre os intervalos.
Mais sobre random, dê uma olhada em: http://www.ime.usp.br/~pf/algoritmos/aulas/random.html
Abraços e boa sorte.
Opa poderia ser sim uma postagem sobre eles o/
Muito obrigado por ajudar com o preenchimento aleatória!
Seu site é muito bom ajuda bastante.
Obrigado pela atenção!
Boa noite Richard.
Eu que agradeço.
Vou ver se consigo um tempo para postar ainda essa semana.
Um grande abraço.
Não entendi, porque o vetor só pode ter até 100 posições? como eu faço para criar um vetor maior ?
Boa tarde Pedro.
Apenas utilizei como exemplo as 100 posições. Para declarar um vetor maior, basta informar entre colchetes quantas posições terá o vetor:
int nVetor[nPos];
No exemplo acima, ele irá criar um vetor conforme quanto valer a variável nPos, se valer 100, será um vetor de 100 posições, se valer 200, será um vetor de 200 posições.
Para criar um que não tenha limite, recomendo utilizar uma lista encadeada.
https://terminaldeinformacao.com/2013/05/19/lista-encadeada-em-linguagem-c/
Um grande abraço.
Boa Dan;
O material que você compartilhou está muito bacana cara e a maneira como tira as dúvidas do pessoal também foi formidável.
Estamos fazendo um trabalho pra faculdade e esse conteúdo aqui vai nos ajudar bastante. Parabéns e agradeço pelo conhecimento partilhado.
Um abraço!
Bom dia Douglas.
Eu que agradeço.
Se tiver sugestões de outras postagens, pode entrar em contato.
Um grande abraço.
Leonardo da Vinci
Daniel baseado nesse programa ai, tem como acrescentar quicksort e merge sort ou outros srts ai?
Salve salve Vinicius, tudo bem?
Da para adaptar sim, se quiser, fiz uma postagem recente sobre Shell Sort e Quick Sort:
https://terminaldeinformacao.com/2015/06/15/shell-sort-e-quick-sort/
Irei estudar a Merge Sort e futuramente faço uma postagem.
Obs.: é Daniel, rs…
Um grande abraço.
Bom dia Dan! Aqui o programa não rodou, na verdade ele para no “Ordenando” e só aparece o primeiro valor do vetor e fica travado. Foi só aqui isso?
Bom dia Guilherme, pode ser o tempo de sleep, tente diminuir o tempo.
Um grande abraço.
Ola, creio que no código resumido, possam o correr equívocos pelos leitores , na linha 09:
if(vetor[i] < vetor[i+1])
Nessa linha, se o vetor de posição i for menor que o de posição i+1, iremos executar o comando do IF, entretanto tradicionalmente o Bolha ordena na crescente (menores valores à esquerda e vai crescendo, isso é o que está na GIF)
No código completo que vc postou está certinho (método crescente tradicional).
Abc
Boa noite José.
Rapaz, obrigado pela contribuição, não tinha nem percebido dessa falha.
Já ajustei na postagem.
Um grande abraço.
O código do inserction sort não esta correto, não funcionou.
Boa noite Leonardo.
Por favor, seria possível enviar quais foram os números utilizados? (para que eu possa reproduzir o erro)
Muito obrigado.
Esse código aqui também não funcionou o do bubble sort
void BubbleSort(int vetor[], int tamanho)
{
int aux, i, j;
for(j=tamanho-1; jj; i++)
{
if(vetor[i] > vetor[i+1])
{
aux=vetor[i];
vetor[i]=vetor[i+1];
vetor[i+1]=aux;
}
}
}
}
O certo seria alterar j=1 e i>j por i<j.
Aqui o código que testei.
#include
void BubbleSort(int vetor[], int tamanho)
{
int aux, i, j;
for(j=tamanho-1; j>=1; j–)
{
for(i=0; i vetor[i+1])
{
aux=vetor[i];
vetor[i]=vetor[i+1];
vetor[i+1]=aux;
}
}
}
}
int main() {
int i, vet[5] = {3, 4, 1, 5, 2};
BubbleSort(vet, 5);
for(i=0; i<5; i++) {
printf("%d ", vet[i]);
}
}
Na função original antes de eu alterar, ele não ordenava.
Boa noite Leonardo.
Obrigado pela contribuição, mas já foi ajustado conforme sugestão acima do José Luiz, inclusive, no código onde é j>=1, o certo é inverter para j<=1 . Talvez esse seria o problema, conforme citado pelo José, o fonte único está funcionando, apenas o separado estava com esse problema. Por favor, envie as informações utilizadas no Inserction Sort para que eu possa atualizar a postagem com os ajustes. Muito Obrigado. Um grande abraço.
Como faço para Implementar um algoritmo utilizando funções que seja exibido um menu para o usuário com as opções: 1 preencher; 2 ordenar o vetor em ordem crescente; 3 ordenar o vetor em ordem decrescente; 4 exibir o conteúdo do vetor; 5 sair.
Boa noite Francisco.
Não sei se te serve, mas fiz algo parecido com lista encadeada, dê uma olhada:
https://terminaldeinformacao.com/2013/05/19/lista-encadeada-em-linguagem-c/
Um grande abraço.
Cara, muito boa essa sua explicação.
Muito obrigado!
Boa tarde Samuel.
Muito obrigado jovem, se tiver sugestões, pode entrar em contato.
Um grande abraço.
Nem sei pra que cismei de querer aprender programação a esta altura do campeonato, pois nasci na metade do seculo passado, acho que a culpa é do meu neto que esta estudando “ISSO”, aí a gente encontra um Site como este, começa a fazer testes, e ve que da certo, então fica mais “viciado” ainda.
Boa noite Santo.
Que história bacana hein, rs…
Realmente vicia mesmo, esse mundo da computação.
Um grande abraço, e jamais desista hein, rs.
desculpe esqueci de mandar o código…..ele roda em c no codeblocks…..obrigado…
lá no int main se trocar com números inteiros pequenos, ele roda maravilha…..ai eu coloquei uma nova sequência com o 365 e ele bugou……
#include
#include
int dividir(int vetor[],int esq,int dir){
int cont=esq;
int i;
int aux;
for(i=esq+1;ivetor[i]){
cont++;
aux=vetor[i];
vetor[i]=vetor[cont];
vetor[cont]=aux;
}
}
aux=vetor[esq];
vetor[esq]=vetor[cont];
vetor[cont]=aux;
return cont;
}
int quick(int vetor[],int esq,int dir){
int pos;
if(esq<dir){
pos=dividir(vetor,esq,dir);
quick(vetor,esq,pos-1);
quick(vetor,pos+1,dir);
}
}
int main(){
system("color 17");
printf("\n\n\n");
printf("\n\n");
int n=10,i;
int vetor[ ]={0,12,365,8,6,14,37,28,5,66};
quick(vetor,0,n);
for(i=0;i<n;i++){
printf(" . %d",vetor[i]);
}
printf("\n\n\n");
return 0;
}
Boa noite Marcos, tudo bem?
Por favor, mande o fonte por e-Mail, pois pelo comentário aqui, ele zoneia um pouco, rs (até retirou as includes).
Fico no aguardo.
oi Daniel….tenho um código em c que roda no codeblocks………ele roda certinho quando eu não coloco números centesimais…..é só colocar um número centesimal que ele trunca tudo…..poderia me dizer o que acontece…..????
Boa noite Marcos.
Você teria o fonte ai? Está usando o tipo float?
Abraços.
Bom dia, amigo como ficaria o código para que ele escolhesse os números aleatoriamente, aumentando as entradas, tipo 100 elementos, 500 elementos e etc..
Boa noite Antonio, tudo bem?
Ao invés de ter o For, para preenchimento de cada posição (linhas 29 a 33), no lugar do printf e scanf, você poderia utilizar um random para preencher os valores.
Abraços.
Olá Dan.
O seu código para selection_sort não funcionou.
Eu também não entendi, então não pude consertar.
Mas eu fiz um código agora, parecido e que está funcionando.
Dá uma olhada.
void selection_sort(int num[], int tam)
{
int i, j, min, swap; /*min é o menor valor encontrado no restante não ordenado do vetor*/
for(i = 0; i < tam; i++) /*swap é o indice de min*/
{
min=num[i];
for(j=i+1;j<tam;j++)
{
if(num[j]<min)
{
min=num[j];
swap=j;
}
}
num[swap]=num[i];
num[i]=min;
}
}
Boa noite Alan, tudo bem?
Muito obrigado pela contribuição, depois irei verificar.
É que no código completo eu deixei funcionando (quando nOpc==1).
Mais uma vez, obrigado.
Um grande abraço.
Olá pessoal. sera que alguém me poderia ajudar, dizendo como é que eu posso validar alguns valores digitados pelo utilizador (valores maiores que 0 e menores que 10) e pegar nesses valores digitados e guardar num vector?
Boa noite Mauro, tudo bem?
Analise o exemplo completo disponibilizado, o que você quer esta entre as linhas 28 e 33, ai você pode adaptar com if do 0 à 10.
Abraços.
Este trabalho ajudou-me a passar de ano.
VLW FLW
Opa.
Um grande abraço Asdrubal.
Boa Tarde, como faria um contador, para contar as trocas feitas?
Boa tarde Thiago, tudo bem?
Você poderia criar uma variável int antes dos laços de repetição, e a cada troca, você usaria o ++ nessa variável.
Espero ter ajudado.
Abraços.
Boa dia Dan, outra duvida, conforme o seu código como conseguiria ordenar de forma decrescente?
Boa tarde Thiago, tudo bem?
No caso você teria que inverter a lógica do laço, por exemplo, onde é >, você teria que colocar <. Ou deixar que ordene, e depois você crie um for que percorre todas as posições ordenadas e coloque inversamente no seu vetor final. Espero ter ajudado. Abraços.
Bom dia Daniel!
Nao estou conseguindo baixar o codigo fonte dessa matéria.
Preciso exatamente dele com o menu.
Se puder, disponibilizar o link deste codigo no comentario te agradeço imensamente.
Boa noite Vitor, tudo bem?
Segue link: https://github.com/dan-atilio/Linguagem_C/blob/master/Fontes/Ordena%C3%A7%C3%B5es/ordenacoes.c
Um grande abraço.
Bom dia, parabéns pelo post, mas tem dois errinhos no primeiro método(selection_sor). Nos dois “for” o sentido do “<" estão invertidos. Fiz a inversão e testei no MikroC, funcionou certinho.
Boa tarde Marcio.
Obrigado pela contribuição, nem havia percebido rs…
No código completo eu tinha ajustado já.
Um grande abraço.
Bom dia Dan atilio.
Cara estou com um problemão na facul e não acho solução…
Preciso explicar tanto quiksort como heapsort porém dinâmicos, sem laços de repetição.
Não tens nada de material assim aí que possas me auxiliar?
Códigos que usem quicksort que não tenham laço?
Te agradeceria se me auxiliasse. Abraço
Boa noite Marcos, tudo bem?
Rapaz, o que tenho é sobre lista encadeada, ai você poderia estudar, e tentar implementar a ordenação nelas.
O link é https://terminaldeinformacao.com/2013/05/19/lista-encadeada-em-linguagem-c/
Abraços.
Alguem tem ideia como resolver?
• Aplicativo de ordenação de um vetor, comparando tempo e mostrando o processo de ordenação para os métodos: Inserção, Seleção, Bolha, Shellsort e Quicksort;
Boa noite Anderson, tudo bem?
Utilize essa postagem como base, juntamente com essa https://terminaldeinformacao.com/2015/06/15/shell-sort-e-quick-sort/ .
Acho que com isso você já terá uma base meio que pronta, só faltando fazer a diferença de tempos.
Abraços.
OI, boa tarde. Eu queria dar uma olhada no código fonte porém nenhum dos links está funcionando.
Bom dia Marina, tudo bem?
Basta você clicar em “Expandir Código” que será lhe mostrado o exemplo completo.
Abraços.
boas eu sou o rei que quero que o grande ex senhor Dan_Atilio ordene um vetor por ordem crescente e decrescente
Bom dia jovem.
Nesse link tem um exemplo:
https://en.wikiversity.org/wiki/C_Source_Code/Sorting_array_in_ascending_and_descending_order
Abraços.
comecei agora a dar vetores e strings, estou a tentar ordenar os numeros crescentes e decrescentes, o crescente funciona mas o decrescente nao dá, se me puder ajudar e dizer o que está errado
#include
#include
main()
{
int vetor[10];
int i,x,y,aux=0,ordem;
printf(“Escolha uma das opcoes abaixo \n”);
printf(“1. crescente\n”);
printf(“2. decrescente\n”);
printf(“> “);
scanf(“%d”,&ordem);
switch(ordem){
case 1:
for(i=0;i
Bom dia Enes.
Nesse link tem um exemplo de como ordenar de forma crescente e decrescente:
https://en.wikiversity.org/wiki/C_Source_Code/Sorting_array_in_ascending_and_descending_order
Abraços.