ORDENAR POR INSERCAO EM MATRIZ

PRESTO 26/11/2010 14:47:41
#358291
Fala pessoal, tudo bem?

Estou com um probleminha. é o seguinte: Estou usando o método de ordenação por inserção no vb, mas ele ordena um vetor de dados. o que eu tenho é uma matriz, e gostaria de saber se é possível fazer o mesmo com a matriz. Mas tem um detalhe: é uma matriz de 2 colunas e linhas sem tamho. (usando a espressão Redim).
A minha matriz está assim:
Coluna 0 1 2 3 4
Coluna 1 45 23 48 32


E eu gostaria de colocar os campos que estão na Coluna 1 em sequência, mas de forma que mantivessem a correspondência com os campos que estão na coluna 0.

Assim, valor 45 , na posicao matriz(0,1) está na mesma linha que o valor 1, na posicao matriz(0,0).

Ufa! Bom, espero que vocês tenham entendido. Só repassando, como faço para ordenar em sequência os valores da coluna 1, de forma que os valores que estão na mesma linha continuem na mesma que os campos que foram ordenados? Assim, o valor 45 na mesma linha do 1, o 23 na mesma linha do 2, e assim por diante?

Vou deixar abaixo o código que usei para ordenar por inserção, só que ordena apenas uma matriz unidirecional (um vetor). Ok? Então é isso rapaziada, espero que alguém tenha alguma idéia que possa ajudar. Até mais!!

[ô]ordena os dados
Dim v(10) As Integer

v(1) = 3
v(2) = 2
v(3) = 0
v(4) = 5
v(5) = 4
v(6) = 8
v(7) = 1
v(8) = 6
v(9) = 7

Dim temp As Integer, j As Integer, k As Integer

For j = 1 To 9 [ô]faça de
[ô]obtem o valor do array e guarda em temp
temp = v(j)
k = j - 1
Do While k > 0 And v(k) > temp [ô]posição anterior
[ô]efetua a inserção do valor
v(k + 1) = v(k)
k = k - 1
Loop
v(k + 1) = temp
Next j

[ô]mostra os valores ordenados

Dim i As Integer
For i = 1 To 9
msgbox v(i)
Next i
ARCADYUM 26/11/2010 15:25:52
#358292
Desculpa,
Mas não entendi. A figura que aparece mostra uma matriz de duas linhas e 04 colunas.
Não entendi também como você deseja a ordenação.
PRESTO 26/11/2010 15:33:41
#358294
Fala galera!!!

Consegui resolver. Na verdade, o esquema é bem semelhante. Não sei se alguém conseguiu enteder direito o problema, mas não é muito complicado. vou colocar o código novo, aí acho que vai dar pra entender legal:

[ô]gravando os dados na matriz, com duas colunas e 5 linhas

v(0, 1) = 1
v(1, 1) = 12

v(0, 2) = 2
v(1, 2) = 23

v(0, 3) = 3
v(1, 3) = 87

v(0, 4) = 4
v(1, 4) = 132

v(0, 5) = 5
v(1, 5) = 32

v(0, 6) = 6
v(1, 6) = 50

Dim temp As Integer, j As Integer, k As Integer

Dim temp2 As Integer [ô]<<< variável nova

For j = 1 To 6 [ô]faça de
[ô]obtem o valor do array e guarda em temp
temp = v(1, j)
temp2 = v(0, j) [ô]pega o valor da mesma posição (linha nova também)
k = j - 1
Do While k > 0 And v(1, k) > temp [ô]posição anterior
[ô]efetua a inserção do valor
v(1, k + 1) = v(1, k)
v(0, k + 1) = v(0, k) [ô]linha nova
k = k - 1
Loop
v(1, k + 1) = temp
v(0, k + 1) = temp2 [ô]linha nova
Next j

Aparentemente, dá a impressão que vai ordenar de forma desigual, porque parece que vai ordenar o linha 1 e a linha 2, mas não é isso que acontece. Bom, esse foi o resultado da ordenação:

12 23 32 50 87 132
1 2 5 6 3 4

Vejam que bate certinho os valores. O 1 com o 12, o 2 com o 23, o 5 com o 32 ...

Vou deixar o tópico aberto por enquanto caso alguém tenha algo a acrescentar, ou fazer um comentário, sei lá. Bom, valeu pelo apoio moral, e é isso aí. Até mais!!!


PRESTO 26/11/2010 15:41:04
#358295
Caro ARCADYUM, eu me embaralhei na hora de escrever a tabela, mas são 2 colunas e quatro linhas. A figura saiu ao contrário. Mas acho que agora dá pra entender. O lance era ordenar os valores pela coluna 1, mas mantendo os valores da coluna 0 paralelos. Então a ordem ficaria assim:

ORIGINAL:

Coluna 0 1 2 3 4
Coluna 1 45 23 48 32

ORDENADO:

Coluna 0 2 4 1 3
Coluna 1 23 32 45 48 [ô]a ordem foi feita por estes elementos aqui.
Tópico encerrado , respostas não são mais permitidas