AJUDA EM ALGORITMO RADIX SORT

INACIOJUNIOR 29/09/2010 15:15:30
#354139
Blz amigos do VBMania, como vai ? Bom estou um problema, tenho um trabalho da faculdade onde estou implementando alguns algoritmos de ordenação, já consegui implantar todos, mas esta faltando o RADIX SORT.....

Bem, eu achei este algoritmo em C# , porém não consegui converte-lo para VB 6.0, se alguém já passou por isso, ou puder me ajudar ficarei agradecido, abaixo esta o algoritmo em C#. O que me causou mais dúvida foi fazer o deslocamento de bits.... Como implementa isso em VB 6 ?

  private static void RadixSort(int[] a)
{
/* O radix


*/
int[] t = new int[a.Length]; // vetor auxiliar
int r = 4;// tamanho dos bits
int b = 32;//numero de bits de um inteiro


int[] count = new int[1 << r];
int[] pref = new int[1 << r];


int groups = (int)Math.Ceiling((double)b / (double)r);//numero de grupos


int mask = (1 << r) - 1;


for (int c = 0, shift = 0; c < groups; c++, shift += r)
{

for (int j = 0; j < count.Length; j++)
count[j] = 0;


for (int i = 0; i < a.Length; i++)
count[(a[i] >> shift) & mask]++;


pref[0] = 0;
for (int i = 1; i < count.Length; i++)
pref[i] = pref[i - 1] + count[i - 1];


for (int i = 0; i < a.Length; i++)
t[pref[(a[i] >> shift) & mask]++] = a[i];


t.CopyTo(a, 0);
}

}


Abraço a todos.
INACIOJUNIOR 01/10/2010 15:54:49
#354264
Olá amigos, nehuma idéia de como implementar esse algoritmo ainda ? Hoje vou roda-lo mais uma vez e vou anotar o erro que acontece, depois eu posto... tô sem Net em casa e tenho que pedir ajuda do serviço. ...

Valeu!!!
INACIOJUNIOR 04/10/2010 12:51:18
#354368
Amigos, alguém tem algum exemplo, ou sabe algum lugar onde posso encontrar os algoritmos de ordenação escritos em VB 6 ? Ou se alguém sabe como trabalhar com esse deslocamento de bits, porque quando tentei converter o algoritmo acima me deu erro na linha onde tem o operador ( >> ), pelo que pesquisei na internet esse operador era para ter funcionado....

Abraço a todos.
INACIOJUNIOR 05/10/2010 16:08:02
#354476
Amigos do VBMania, como esta dificil conseguir ajuda acabei tentando converter o código em C# para VB.NET como vocês podem observar abaixo:

  Private Shared Sub RadixSort(a As Integer())
[ô] O radix
[ô]
[ô]
[ô]

Dim t As Integer() = New Integer(a.Length - 1) {}
[ô] vetor auxiliar
Dim r As Integer = 4
[ô] tamanho dos bits
Dim b As Integer = 32
[ô]numero de bits de um inteiro

Dim count As Integer() = New Integer((1 << r) - 1) {}
Dim pref As Integer() = New Integer((1 << r) - 1) {}


Dim groups As Integer = CInt(Math.Ceiling(CDbl(b) / CDbl(r)))
[ô]numero de grupos

Dim mask As Integer = (1 << r) - 1


Dim c As Integer = 0, shift As Integer = 0
While c < groups

For j As Integer = 0 To count.Length - 1
count(j) = 0
Next


For i As Integer = 0 To a.Length - 1
count((a(i) >> shift) And mask) += 1
Next


pref(0) = 0
For i As Integer = 1 To count.Length - 1
pref(i) = pref(i - 1) + count(i - 1)
Next


For i As Integer = 0 To a.Length - 1
t(System.Math.Max(System.Threading.Interlocked.Increment(pref((a(i) >> shift) And mask)),pref((a(i) >> shift) And mask) - 1)) = a(i)
Next


t.CopyTo(a, 0)
c += 1
shift += r
End While

End Sub


Porém na linha:
 For i As Integer = 0 To a.Length - 1
t(System.Math.Max(System.Threading.Interlocked.Increment(pref((a(i) >> shift) And mask)),pref((a(i) >> shift) And mask) - 1)) = a(i)
Next


Dá erro, pois se tenho um array com 20 posições (0 a 19) ele tenta me colocar um valor na posição 21, daí acontece o erro falando que esta fora do índice do array, já tentei várias coisas mas não consegui resolver este problema, se alguém puder me ajudar ficarei agradecido...
Tópico encerrado , respostas não são mais permitidas