AJUDA EM ALGORITMO RADIX SORT
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 ?
Abraço a todos.
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.
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!!!
Valeu!!!
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.
Abraço a todos.
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:
Porém na linha:
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...
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