• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Nazgulled

Inserir valores num array de forma ordenada

7 mensagens neste tópico

Deparei-me aqui com um exercício que não faço a mínima como resolver. A minha primeira ideia seria inserir os valores todos no array pela mesma ordem que são lidos. Depois, bastava chamar o Arrays.sort(a) e já estava, mas não é isso que é pedido. Criar um algoritmo de ordenação é algo que também não é pedido neste exercício, apesar de não dizer que sim nem que não, eu perguntei ao prof e ele disse que não.

O exercício é o seguinte:

Ex5: Escrever um programa que faça a leitura de N elementos inteiros para um array, mas

que os insira de forma a que o array se mantenha sempre ordenado por ordem crescente.

Alguém me dê umas luzes, eu e algoritmia nunca fomos grandes amigos...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pá sem sort só mesmo fazendo tipo Hashtable metes o inteiro na posição correspondente tipo int x = 10 e metes o x na posição 10, acho muito parvo mas realmente não me ocorre mais nada sem o sort.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pois, mas eu mostrei ao prof o meu código com o sort e ele disse que não era isso que está no exercício, porque sim, isso era a forma correcta de fazer, mas não era o que estava a ser pedido. Mas também disse que não era propriamente para fazer um algoritmo de ordenação... Só que eu não estou a ver outra maneira...

Eu também acho essa solução um bocado parva, até porque eu estou a ler N digitos e declaração do array é int[] cenas = new int[N] pelo que esse método não iria funcionar... Duvido que seja isso que querem, se for, é um bocado estúpido...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Começas a percorrer o array pela última posição ocupada, e enquanto os valores forem maiores do que o novo, deslocas os valores para a direita.

O algoritmo deve ser mais ou menos isto:

i=array.length;

while  i>=0 & new<array[ i ]

  array[i+1]=array[ i ]

  i--

array[i+1]=new

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

AQPI:

bem este exercício é igualzinho a um exercício que tive de resolver na minha última aula de POO na UMINHO

ca vai a minha resolução, esta em java:

import java.util.*;
public class Exercicio05
{
  public static void main(String[] args) {
    System.out.print("Quantos elementos? ");
    int dimensao = Input.lerInt();
    int[] lista = new int[dimensao];
    int valor, aux, indice=0;
    
    for (int i=0; i<dimensao; i++) {
      System.out.print("Elemento: "); valor = Input.lerInt();
      lista[i] = valor;
      
      if (i!=0) {
        indice = i-1;
        for (int p=i; p>0; p--) {
          if (lista[indice]>lista[p]) {
            aux = lista[p];
            lista[p] = lista[indice];
            lista[indice] = aux;
          }
          indice--;
          if (indice<0)
            indice = 0;
        }
      }
      // DEBUG:
      System.out.println(i+" : "+Arrays.toString(lista));
    }
    
    System.out.println(Arrays.toString(lista));
  }
}

este programa utiliza uma classe formecida pelos prof, a classe Input que não é mais do que uma classe que utiliza o Scanner para ler inteiros, double's, string's ...

a ordenação é feita no momento de inserção, o prof. resolveu o exercício na aula com um algoritmo todo xpto mas quando tentei resolver com esse algoritmo não funcionou lol assim tive de  :wallbash: até conseguir encontrar uma forma de resolver este problema.

espero ter ajudado alguém com esta resolução :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora