Boa tarde pessoal, estou com um problema ao realizar uma busca no número de ocorrencias por busca binária.
A classe está em VB, mas acho que vocês podem dar uam força.
[code]Public Function getOcorrencia(ByVal numero As Integer) As Integer
Dim meio As Integer
Dim min As Integer
Dim max As Integer
min = 0
max = nome.GetUpperBound(0)
While min <= max
meio = (min + max) \ 2
If numero = nome(meio) Then
Return meio
ElseIf numero < nome(meio) Then
max = meio - 1
Else
min = meio + 1
End If
End While
Return -1
End Function[/code]
Gostaria de saber o que preciso implementar nessa classe pra ela achar o número de ocorrencias na busca.
Por exemplo, se eu digitar e mandar gravar no meu ListBox essa sequencia.
1
7
8
1
2
3
4
8
E depois de ordenada eu quiser saber o número de ocorrencias do número 1 dentro do ListBox, o que é preciso eu fazer.
Cara, a busca binária não é o melhor caso para essa sua situação. O algoritmo da busca binária, ao encontrar o elemento procurado, pára.
Se assim não o fizesse, o algoritmo nunca saberia quando parar.
[quote=ruivo]Cara, a busca binária não é o melhor caso para essa sua situação. O algoritmo da busca binária, ao encontrar o elemento procurado, pára.
Se assim não o fizesse, o algoritmo nunca saberia quando parar.[/quote]
Certeza que não tem como buscar o número de ocorrencias?
O exercicio que o professor passou ele pediu para buscarmos o número de ocorrencias do valor procurado…
Consegui obter o número de ocorrências através disso.
[code]Public Function getOcorrencia(ByVal numero As Integer) As Integer
Dim ocorrencias As Integer = 0
For i = 0 To numero
If (Me.nome(i) = numero) Then ocorrencias = ocorrencias + 1
Next
Return ocorrencias
End Function[/code]
O único problema é que não consigo trabalhar com números com mais de 1 algarismo, teria um modo de tratá-lo?
[code]Public Class Classifica
Private nome(10) As String
Private indice As Integer = -1
Public Function setNome(ByVal nome As String) As Boolean
Dim cheio As Boolean = False
indice = indice + 1
Me.nome(indice) = nome
If indice = 9 Then cheio = True
Return cheio
End Function
Public Sub zeraArray()
For i = 0 To indice
nome(i) = ""
Next
indice = -1
End Sub
Public Function getNome() As String()
Return Me.nome
End Function
Public Function getIndice() As Integer
Return Me.indice
End Function
Public Sub ordenaArray()
Dim nome As String
If (Me.indice < 0) Then Exit Sub
For j = 0 To Me.indice
nome = Me.nome(j)
For i = j To Me.indice
If (Me.nome(i) < nome) Then
nome = Me.nome(j)
Me.nome(j) = Me.nome(i)
Me.nome(i) = nome
End If
Next
Next
End Sub
Public Function getPesquisa(ByVal numero As Integer) As Integer
Dim meio As Integer
Dim min As Integer
Dim max As Integer
min = 0
max = nome.GetUpperBound(0)
While min <= max
meio = (min + max) \ 2
If numero = nome(meio) Then
Return meio
ElseIf numero < nome(meio) Then
max = meio - 1
Else
min = meio + 1
End If
End While
Return -1
End Function
Public Function getOcorrencia(ByVal numero As Integer) As Integer
Dim ocorrencias As Integer = 0
For i = 0 To numero
If (Me.nome(i) = numero) Then ocorrencias = ocorrencias + 1
Next
Return ocorrencias
End Function